From 6a912ee00313f58750e7724cb96010d96ec09e5a Mon Sep 17 00:00:00 2001 From: Tommaso Berlose Date: Sun, 11 Oct 2020 21:59:44 +0200 Subject: [PATCH] Add a few more providers and fix multiple bugs --- .idea/caches/build_file_checksums.ser | Bin 537 -> 537 bytes app/build.gradle | 4 +- .../BottomSheetWeatherProviderSettings.kt | 64 ++++ .../anotherwidget/helpers/WeatherHelper.kt | 115 ++++-- .../network/WeatherNetworkApi.kt | 342 +++++++++++++----- .../receivers/WeatherReceiver.kt | 7 +- .../ui/activities/WeatherProviderActivity.kt | 181 +++++---- .../ui/fragments/MainFragment.kt | 10 +- .../ui/fragments/SettingsFragment.kt | 4 +- .../ui/fragments/WeatherTabFragment.kt | 6 +- .../ui/viewmodels/WeatherProviderViewModel.kt | 19 + .../anotherwidget/ui/widgets/MainWidget.kt | 14 +- .../anotherwidget/utils/Extensions.kt | 4 +- .../res/drawable-hdpi/round_call_made.png | Bin 0 -> 273 bytes .../round_call_made_white_18.png | Bin 0 -> 184 bytes .../round_call_made_white_24.png | Bin 0 -> 195 bytes .../round_call_made_white_48.png | Bin 0 -> 295 bytes .../drawable-hdpi/round_close_white_18.png | Bin 0 -> 196 bytes .../drawable-hdpi/round_close_white_24.png | Bin 0 -> 221 bytes .../drawable-hdpi/round_close_white_36.png | Bin 0 -> 292 bytes .../drawable-hdpi/round_close_white_48.png | Bin 0 -> 379 bytes .../main/res/drawable-hdpi/round_language.png | Bin 0 -> 472 bytes .../drawable-hdpi/round_language_white_24.png | Bin 0 -> 562 bytes .../drawable-hdpi/round_language_white_36.png | Bin 0 -> 871 bytes .../drawable-hdpi/round_language_white_48.png | Bin 0 -> 1122 bytes .../drawable-hdpi/round_pageview_white_18.png | Bin 0 -> 296 bytes .../drawable-hdpi/round_pageview_white_24.png | Bin 0 -> 365 bytes .../drawable-hdpi/round_pageview_white_36.png | Bin 0 -> 506 bytes .../drawable-hdpi/round_pageview_white_48.png | Bin 0 -> 614 bytes .../main/res/drawable-hdpi/round_public.png | Bin 0 -> 952 bytes .../drawable-hdpi/round_public_white_18.png | Bin 0 -> 450 bytes .../drawable-hdpi/round_public_white_24.png | Bin 0 -> 502 bytes .../drawable-hdpi/round_public_white_36.png | Bin 0 -> 758 bytes .../main/res/drawable-hdpi/round_search.png | Bin 0 -> 676 bytes .../drawable-hdpi/round_search_white_18.png | Bin 0 -> 314 bytes .../drawable-hdpi/round_search_white_24.png | Bin 0 -> 380 bytes .../drawable-hdpi/round_search_white_36.png | Bin 0 -> 557 bytes .../res/drawable-mdpi/round_call_made.png | Bin 0 -> 195 bytes .../round_call_made_white_18.png | Bin 0 -> 154 bytes .../round_call_made_white_24.png | Bin 0 -> 149 bytes .../round_call_made_white_48.png | Bin 0 -> 234 bytes .../drawable-mdpi/round_close_white_18.png | Bin 0 -> 153 bytes .../drawable-mdpi/round_close_white_24.png | Bin 0 -> 186 bytes .../drawable-mdpi/round_close_white_36.png | Bin 0 -> 221 bytes .../drawable-mdpi/round_close_white_48.png | Bin 0 -> 297 bytes .../main/res/drawable-mdpi/round_language.png | Bin 0 -> 333 bytes .../drawable-mdpi/round_language_white_24.png | Bin 0 -> 400 bytes .../drawable-mdpi/round_language_white_36.png | Bin 0 -> 562 bytes .../drawable-mdpi/round_language_white_48.png | Bin 0 -> 777 bytes .../drawable-mdpi/round_pageview_white_18.png | Bin 0 -> 222 bytes .../drawable-mdpi/round_pageview_white_24.png | Bin 0 -> 248 bytes .../drawable-mdpi/round_pageview_white_36.png | Bin 0 -> 365 bytes .../drawable-mdpi/round_pageview_white_48.png | Bin 0 -> 432 bytes .../main/res/drawable-mdpi/round_public.png | Bin 0 -> 635 bytes .../drawable-mdpi/round_public_white_18.png | Bin 0 -> 307 bytes .../drawable-mdpi/round_public_white_24.png | Bin 0 -> 346 bytes .../drawable-mdpi/round_public_white_36.png | Bin 0 -> 502 bytes .../main/res/drawable-mdpi/round_search.png | Bin 0 -> 484 bytes .../drawable-mdpi/round_search_white_18.png | Bin 0 -> 243 bytes .../drawable-mdpi/round_search_white_24.png | Bin 0 -> 276 bytes .../drawable-mdpi/round_search_white_36.png | Bin 0 -> 380 bytes .../res/drawable-xhdpi/round_call_made.png | Bin 0 -> 295 bytes .../round_call_made_white_18.png | Bin 0 -> 195 bytes .../round_call_made_white_24.png | Bin 0 -> 234 bytes .../round_call_made_white_48.png | Bin 0 -> 381 bytes .../drawable-xhdpi/round_close_white_18.png | Bin 0 -> 221 bytes .../drawable-xhdpi/round_close_white_24.png | Bin 0 -> 297 bytes .../drawable-xhdpi/round_close_white_36.png | Bin 0 -> 379 bytes .../drawable-xhdpi/round_close_white_48.png | Bin 0 -> 485 bytes .../res/drawable-xhdpi/round_language.png | Bin 0 -> 562 bytes .../round_language_white_24.png | Bin 0 -> 777 bytes .../round_language_white_36.png | Bin 0 -> 1122 bytes .../round_language_white_48.png | Bin 0 -> 1378 bytes .../round_pageview_white_18.png | Bin 0 -> 365 bytes .../round_pageview_white_24.png | Bin 0 -> 432 bytes .../round_pageview_white_36.png | Bin 0 -> 614 bytes .../round_pageview_white_48.png | Bin 0 -> 807 bytes .../main/res/drawable-xhdpi/round_public.png | Bin 0 -> 1189 bytes .../drawable-xhdpi/round_public_white_18.png | Bin 0 -> 502 bytes .../drawable-xhdpi/round_public_white_24.png | Bin 0 -> 635 bytes .../drawable-xhdpi/round_public_white_36.png | Bin 0 -> 952 bytes .../main/res/drawable-xhdpi/round_search.png | Bin 0 -> 877 bytes .../drawable-xhdpi/round_search_white_18.png | Bin 0 -> 380 bytes .../drawable-xhdpi/round_search_white_24.png | Bin 0 -> 484 bytes .../drawable-xhdpi/round_search_white_36.png | Bin 0 -> 676 bytes .../res/drawable-xxhdpi/round_call_made.png | Bin 0 -> 437 bytes .../round_call_made_white_18.png | Bin 0 -> 273 bytes .../round_call_made_white_24.png | Bin 0 -> 295 bytes .../round_call_made_white_48.png | Bin 0 -> 568 bytes .../drawable-xxhdpi/round_close_white_18.png | Bin 0 -> 292 bytes .../drawable-xxhdpi/round_close_white_24.png | Bin 0 -> 379 bytes .../drawable-xxhdpi/round_close_white_36.png | Bin 0 -> 509 bytes .../drawable-xxhdpi/round_close_white_48.png | Bin 0 -> 689 bytes .../res/drawable-xxhdpi/round_language.png | Bin 0 -> 871 bytes .../round_language_white_24.png | Bin 0 -> 1122 bytes .../round_language_white_36.png | Bin 0 -> 1544 bytes .../round_language_white_48.png | Bin 0 -> 1952 bytes .../round_pageview_white_18.png | Bin 0 -> 506 bytes .../round_pageview_white_24.png | Bin 0 -> 614 bytes .../round_pageview_white_36.png | Bin 0 -> 893 bytes .../round_pageview_white_48.png | Bin 0 -> 1136 bytes .../main/res/drawable-xxhdpi/round_public.png | Bin 0 -> 1662 bytes .../drawable-xxhdpi/round_public_white_18.png | Bin 0 -> 758 bytes .../drawable-xxhdpi/round_public_white_24.png | Bin 0 -> 952 bytes .../drawable-xxhdpi/round_public_white_36.png | Bin 0 -> 1331 bytes .../main/res/drawable-xxhdpi/round_search.png | Bin 0 -> 1224 bytes .../drawable-xxhdpi/round_search_white_18.png | Bin 0 -> 557 bytes .../drawable-xxhdpi/round_search_white_24.png | Bin 0 -> 676 bytes .../drawable-xxhdpi/round_search_white_36.png | Bin 0 -> 994 bytes .../res/drawable-xxxhdpi/round_call_made.png | Bin 0 -> 568 bytes .../round_call_made_white_18.png | Bin 0 -> 295 bytes .../round_call_made_white_24.png | Bin 0 -> 381 bytes .../round_call_made_white_48.png | Bin 0 -> 683 bytes .../drawable-xxxhdpi/round_close_white_18.png | Bin 0 -> 379 bytes .../drawable-xxxhdpi/round_close_white_24.png | Bin 0 -> 485 bytes .../drawable-xxxhdpi/round_close_white_36.png | Bin 0 -> 689 bytes .../drawable-xxxhdpi/round_close_white_48.png | Bin 0 -> 872 bytes .../res/drawable-xxxhdpi/round_language.png | Bin 0 -> 1122 bytes .../round_language_white_24.png | Bin 0 -> 1378 bytes .../round_language_white_36.png | Bin 0 -> 1952 bytes .../round_language_white_48.png | Bin 0 -> 2491 bytes .../round_pageview_white_18.png | Bin 0 -> 614 bytes .../round_pageview_white_24.png | Bin 0 -> 807 bytes .../round_pageview_white_36.png | Bin 0 -> 1136 bytes .../round_pageview_white_48.png | Bin 0 -> 1427 bytes .../res/drawable-xxxhdpi/round_public.png | Bin 0 -> 2081 bytes .../round_public_white_18.png | Bin 0 -> 952 bytes .../round_public_white_24.png | Bin 0 -> 1189 bytes .../round_public_white_36.png | Bin 0 -> 1662 bytes .../res/drawable-xxxhdpi/round_search.png | Bin 0 -> 1565 bytes .../round_search_white_18.png | Bin 0 -> 676 bytes .../round_search_white_24.png | Bin 0 -> 877 bytes .../round_search_white_36.png | Bin 0 -> 1224 bytes .../main/res/drawable/round_call_made_24.xml | 10 + app/src/main/res/drawable/round_close.xml | 10 + .../main/res/drawable/round_language_24.xml | 10 + app/src/main/res/drawable/round_pageview.xml | 10 + app/src/main/res/drawable/round_public_24.xml | 10 + app/src/main/res/drawable/round_search_24.xml | 10 + .../res/layout/activity_weather_provider.xml | 189 ++-------- app/src/main/res/layout/fragment_app_main.xml | 8 +- .../res/layout/fragment_glance_settings.xml | 4 +- .../res/layout/fragment_weather_settings.xml | 4 +- app/src/main/res/layout/the_widget.xml | 11 + .../res/layout/weather_provider_list_item.xml | 86 +++++ .../weather_provider_settings_layout.xml | 127 +++++++ app/src/main/res/values-it/strings.xml | 32 +- app/src/main/res/values/strings.xml | 35 +- app/src/main/res/values/styles.xml | 1 - 149 files changed, 923 insertions(+), 404 deletions(-) create mode 100644 app/src/main/java/com/tommasoberlose/anotherwidget/components/BottomSheetWeatherProviderSettings.kt create mode 100644 app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/WeatherProviderViewModel.kt create mode 100644 app/src/main/res/drawable-hdpi/round_call_made.png create mode 100644 app/src/main/res/drawable-hdpi/round_call_made_white_18.png create mode 100644 app/src/main/res/drawable-hdpi/round_call_made_white_24.png create mode 100644 app/src/main/res/drawable-hdpi/round_call_made_white_48.png create mode 100644 app/src/main/res/drawable-hdpi/round_close_white_18.png create mode 100644 app/src/main/res/drawable-hdpi/round_close_white_24.png create mode 100644 app/src/main/res/drawable-hdpi/round_close_white_36.png create mode 100644 app/src/main/res/drawable-hdpi/round_close_white_48.png create mode 100644 app/src/main/res/drawable-hdpi/round_language.png create mode 100644 app/src/main/res/drawable-hdpi/round_language_white_24.png create mode 100644 app/src/main/res/drawable-hdpi/round_language_white_36.png create mode 100644 app/src/main/res/drawable-hdpi/round_language_white_48.png create mode 100644 app/src/main/res/drawable-hdpi/round_pageview_white_18.png create mode 100644 app/src/main/res/drawable-hdpi/round_pageview_white_24.png create mode 100644 app/src/main/res/drawable-hdpi/round_pageview_white_36.png create mode 100644 app/src/main/res/drawable-hdpi/round_pageview_white_48.png create mode 100644 app/src/main/res/drawable-hdpi/round_public.png create mode 100644 app/src/main/res/drawable-hdpi/round_public_white_18.png create mode 100644 app/src/main/res/drawable-hdpi/round_public_white_24.png create mode 100644 app/src/main/res/drawable-hdpi/round_public_white_36.png create mode 100644 app/src/main/res/drawable-hdpi/round_search.png create mode 100644 app/src/main/res/drawable-hdpi/round_search_white_18.png create mode 100644 app/src/main/res/drawable-hdpi/round_search_white_24.png create mode 100644 app/src/main/res/drawable-hdpi/round_search_white_36.png create mode 100644 app/src/main/res/drawable-mdpi/round_call_made.png create mode 100644 app/src/main/res/drawable-mdpi/round_call_made_white_18.png create mode 100644 app/src/main/res/drawable-mdpi/round_call_made_white_24.png create mode 100644 app/src/main/res/drawable-mdpi/round_call_made_white_48.png create mode 100644 app/src/main/res/drawable-mdpi/round_close_white_18.png create mode 100644 app/src/main/res/drawable-mdpi/round_close_white_24.png create mode 100644 app/src/main/res/drawable-mdpi/round_close_white_36.png create mode 100644 app/src/main/res/drawable-mdpi/round_close_white_48.png create mode 100644 app/src/main/res/drawable-mdpi/round_language.png create mode 100644 app/src/main/res/drawable-mdpi/round_language_white_24.png create mode 100644 app/src/main/res/drawable-mdpi/round_language_white_36.png create mode 100644 app/src/main/res/drawable-mdpi/round_language_white_48.png create mode 100644 app/src/main/res/drawable-mdpi/round_pageview_white_18.png create mode 100644 app/src/main/res/drawable-mdpi/round_pageview_white_24.png create mode 100644 app/src/main/res/drawable-mdpi/round_pageview_white_36.png create mode 100644 app/src/main/res/drawable-mdpi/round_pageview_white_48.png create mode 100644 app/src/main/res/drawable-mdpi/round_public.png create mode 100644 app/src/main/res/drawable-mdpi/round_public_white_18.png create mode 100644 app/src/main/res/drawable-mdpi/round_public_white_24.png create mode 100644 app/src/main/res/drawable-mdpi/round_public_white_36.png create mode 100644 app/src/main/res/drawable-mdpi/round_search.png create mode 100644 app/src/main/res/drawable-mdpi/round_search_white_18.png create mode 100644 app/src/main/res/drawable-mdpi/round_search_white_24.png create mode 100644 app/src/main/res/drawable-mdpi/round_search_white_36.png create mode 100644 app/src/main/res/drawable-xhdpi/round_call_made.png create mode 100644 app/src/main/res/drawable-xhdpi/round_call_made_white_18.png create mode 100644 app/src/main/res/drawable-xhdpi/round_call_made_white_24.png create mode 100644 app/src/main/res/drawable-xhdpi/round_call_made_white_48.png create mode 100644 app/src/main/res/drawable-xhdpi/round_close_white_18.png create mode 100644 app/src/main/res/drawable-xhdpi/round_close_white_24.png create mode 100644 app/src/main/res/drawable-xhdpi/round_close_white_36.png create mode 100644 app/src/main/res/drawable-xhdpi/round_close_white_48.png create mode 100644 app/src/main/res/drawable-xhdpi/round_language.png create mode 100644 app/src/main/res/drawable-xhdpi/round_language_white_24.png create mode 100644 app/src/main/res/drawable-xhdpi/round_language_white_36.png create mode 100644 app/src/main/res/drawable-xhdpi/round_language_white_48.png create mode 100644 app/src/main/res/drawable-xhdpi/round_pageview_white_18.png create mode 100644 app/src/main/res/drawable-xhdpi/round_pageview_white_24.png create mode 100644 app/src/main/res/drawable-xhdpi/round_pageview_white_36.png create mode 100644 app/src/main/res/drawable-xhdpi/round_pageview_white_48.png create mode 100644 app/src/main/res/drawable-xhdpi/round_public.png create mode 100644 app/src/main/res/drawable-xhdpi/round_public_white_18.png create mode 100644 app/src/main/res/drawable-xhdpi/round_public_white_24.png create mode 100644 app/src/main/res/drawable-xhdpi/round_public_white_36.png create mode 100644 app/src/main/res/drawable-xhdpi/round_search.png create mode 100644 app/src/main/res/drawable-xhdpi/round_search_white_18.png create mode 100644 app/src/main/res/drawable-xhdpi/round_search_white_24.png create mode 100644 app/src/main/res/drawable-xhdpi/round_search_white_36.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_call_made.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_call_made_white_18.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_call_made_white_24.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_call_made_white_48.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_close_white_18.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_close_white_24.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_close_white_36.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_close_white_48.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_language.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_language_white_24.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_language_white_36.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_language_white_48.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_pageview_white_18.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_pageview_white_24.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_pageview_white_36.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_pageview_white_48.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_public.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_public_white_18.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_public_white_24.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_public_white_36.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_search.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_search_white_18.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_search_white_24.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_search_white_36.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_call_made.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_call_made_white_18.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_call_made_white_24.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_call_made_white_48.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_close_white_18.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_close_white_24.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_close_white_36.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_close_white_48.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_language.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_language_white_24.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_language_white_36.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_language_white_48.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_pageview_white_18.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_pageview_white_24.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_pageview_white_36.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_pageview_white_48.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_public.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_public_white_18.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_public_white_24.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_public_white_36.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_search.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_search_white_18.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_search_white_24.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_search_white_36.png create mode 100644 app/src/main/res/drawable/round_call_made_24.xml create mode 100644 app/src/main/res/drawable/round_close.xml create mode 100644 app/src/main/res/drawable/round_language_24.xml create mode 100644 app/src/main/res/drawable/round_pageview.xml create mode 100644 app/src/main/res/drawable/round_public_24.xml create mode 100644 app/src/main/res/drawable/round_search_24.xml create mode 100644 app/src/main/res/layout/weather_provider_list_item.xml create mode 100644 app/src/main/res/layout/weather_provider_settings_layout.xml diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 005fbc367edbfccc40685d11b9901469c330e738..570321ebc1e05dbb94ed44fd7ecb85e95da00643 100644 GIT binary patch delta 34 scmV+-0NwwY1epYomj!hhJzmnWoNNIR(n!#{k*=L=M7bL)>reHToeN=j1R7MyJY6_m{hJ*hqPg=kjT#sTBb1+ztQ$ diff --git a/app/build.gradle b/app/build.gradle index 43043a1..023be3a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,8 +23,8 @@ android { applicationId "com.tommasoberlose.anotherwidget" minSdkVersion 23 targetSdkVersion 29 - versionCode 105 - versionName "2.0.13" + versionCode 106 + versionName "2.0.14" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" buildConfigField("String", "GOOGLE_API_KEY", apikeyProperties['GOOGLE_API_KEY']) diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/components/BottomSheetWeatherProviderSettings.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/components/BottomSheetWeatherProviderSettings.kt new file mode 100644 index 0000000..334e8b5 --- /dev/null +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/components/BottomSheetWeatherProviderSettings.kt @@ -0,0 +1,64 @@ +package com.tommasoberlose.anotherwidget.components + +import android.content.Context +import android.view.View +import androidx.core.view.isVisible +import com.google.android.material.bottomsheet.BottomSheetDialog +import com.tommasoberlose.anotherwidget.R +import com.tommasoberlose.anotherwidget.global.Constants +import com.tommasoberlose.anotherwidget.global.Preferences +import com.tommasoberlose.anotherwidget.helpers.WeatherHelper +import com.tommasoberlose.anotherwidget.utils.openURI +import kotlinx.android.synthetic.main.weather_provider_settings_layout.view.* + +class BottomSheetWeatherProviderSettings(context: Context, callback: () -> Unit) : BottomSheetDialog(context, R.style.BottomSheetDialogTheme) { + + init { + val view = View.inflate(context, R.layout.weather_provider_settings_layout, null) + view.api_key_container.isVisible = WeatherHelper.isKeyRequired() + view.action_save_key.isVisible = WeatherHelper.isKeyRequired() + + WeatherHelper.getProviderInfoTitle(context).let { title -> + view.info_title.text = title + view.info_title.isVisible = title != "" + } + + WeatherHelper.getProviderInfoSubtitle(context).let { subtitle -> + view.info_subtitle.text = subtitle + view.info_subtitle.isVisible = subtitle != "" + } + + view.info_provider.text = WeatherHelper.getProviderName(context) + + view.api_key.editText?.setText(when (Constants.WeatherProvider.fromInt(Preferences.weatherProvider)) { + Constants.WeatherProvider.OPEN_WEATHER -> Preferences.weatherProviderApiOpen + Constants.WeatherProvider.WEATHER_BIT -> Preferences.weatherProviderApiWeatherBit + Constants.WeatherProvider.WEATHER_API -> Preferences.weatherProviderApiWeatherApi + Constants.WeatherProvider.HERE -> Preferences.weatherProviderApiHere + Constants.WeatherProvider.ACCUWEATHER -> Preferences.weatherProviderApiAccuweather + Constants.WeatherProvider.WEATHER_GOV, + Constants.WeatherProvider.YR, + null -> "" + }) + + view.action_open_provider.setOnClickListener { + context.openURI(WeatherHelper.getProviderLink()) + } + + view.action_save_key.setOnClickListener { + val key = view.api_key.editText?.text.toString() + when (Constants.WeatherProvider.fromInt(Preferences.weatherProvider)) { + Constants.WeatherProvider.OPEN_WEATHER -> Preferences.weatherProviderApiOpen = key + Constants.WeatherProvider.WEATHER_BIT -> Preferences.weatherProviderApiWeatherBit = key + Constants.WeatherProvider.WEATHER_API -> Preferences.weatherProviderApiWeatherApi = key + Constants.WeatherProvider.HERE -> Preferences.weatherProviderApiHere = key + Constants.WeatherProvider.ACCUWEATHER -> Preferences.weatherProviderApiAccuweather = key + else -> {} + } + callback.invoke() + dismiss() + } + + setContentView(view) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WeatherHelper.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WeatherHelper.kt index 1346167..29e906d 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WeatherHelper.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WeatherHelper.kt @@ -3,6 +3,7 @@ package com.tommasoberlose.anotherwidget.helpers import android.Manifest import android.content.Context import android.os.Build +import android.util.Log import com.google.android.gms.location.LocationServices import com.tommasoberlose.anotherwidget.R import com.tommasoberlose.anotherwidget.global.Constants @@ -12,6 +13,9 @@ import com.tommasoberlose.anotherwidget.ui.fragments.MainFragment import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission import com.tommasoberlose.anotherwidget.utils.isDarkTheme +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import org.greenrobot.eventbus.EventBus @@ -21,7 +25,7 @@ import org.greenrobot.eventbus.EventBus object WeatherHelper { - fun updateWeather(context: Context) { + suspend fun updateWeather(context: Context) { val networkApi = WeatherNetworkApi(context) if (Preferences.customLocationAdd != "") { networkApi.updateWeather() @@ -32,10 +36,17 @@ object WeatherHelper { if (location != null) { Preferences.customLocationLat = location.latitude.toString() Preferences.customLocationLon = location.longitude.toString() - - networkApi.updateWeather() - EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } + + CoroutineScope(Dispatchers.IO).launch { + networkApi.updateWeather() + } + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) + } else { + CoroutineScope(Dispatchers.IO).launch { + networkApi.updateWeather() + } + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } } @@ -48,7 +59,7 @@ object WeatherHelper { MainWidget.updateWidget(context) } - fun getProviderName(context: Context, provider: Constants.WeatherProvider): String { + fun getProviderName(context: Context, provider: Constants.WeatherProvider = Constants.WeatherProvider.fromInt(Preferences.weatherProvider)!!): String { return context.getString(when(provider) { Constants.WeatherProvider.OPEN_WEATHER -> R.string.settings_weather_provider_open_weather Constants.WeatherProvider.WEATHER_BIT -> R.string.settings_weather_provider_weatherbit @@ -60,21 +71,8 @@ object WeatherHelper { }) } - fun getProviderLinkName(context: Context): String { - return context.getString(when(Constants.WeatherProvider.fromInt(Preferences.weatherProvider)) { - Constants.WeatherProvider.OPEN_WEATHER -> R.string.action_open_provider_open_weather - Constants.WeatherProvider.WEATHER_BIT -> R.string.action_open_provider_weatherbit - Constants.WeatherProvider.WEATHER_API -> R.string.action_open_provider_weatherapi - Constants.WeatherProvider.HERE -> R.string.action_open_provider_here - Constants.WeatherProvider.ACCUWEATHER -> R.string.action_open_provider_accuweather - Constants.WeatherProvider.WEATHER_GOV -> R.string.action_open_provider_weather_gov - Constants.WeatherProvider.YR -> R.string.action_open_provider_yr - else -> R.string.nothing - }) - } - - fun getProviderInfoTitle(context: Context): String { - return context.getString(when(Constants.WeatherProvider.fromInt(Preferences.weatherProvider)) { + fun getProviderInfoTitle(context: Context, provider: Constants.WeatherProvider? = Constants.WeatherProvider.fromInt(Preferences.weatherProvider)!!): String { + return context.getString(when(provider) { Constants.WeatherProvider.OPEN_WEATHER -> R.string.weather_provider_info_open_weather_title Constants.WeatherProvider.WEATHER_BIT -> R.string.weather_provider_info_weatherbit_title Constants.WeatherProvider.WEATHER_API -> R.string.weather_provider_info_weatherapi_title @@ -86,8 +84,8 @@ object WeatherHelper { }) } - fun getProviderInfoSubtitle(context: Context): String { - return context.getString(when(Constants.WeatherProvider.fromInt(Preferences.weatherProvider)) { + fun getProviderInfoSubtitle(context: Context, provider: Constants.WeatherProvider? = Constants.WeatherProvider.fromInt(Preferences.weatherProvider)!!): String { + return context.getString(when(provider) { Constants.WeatherProvider.OPEN_WEATHER -> R.string.weather_provider_info_open_weather_subtitle Constants.WeatherProvider.WEATHER_BIT -> R.string.weather_provider_info_weatherbit_subtitle Constants.WeatherProvider.WEATHER_API -> R.string.weather_provider_info_weatherapi_subtitle @@ -99,20 +97,20 @@ object WeatherHelper { }) } - fun getProviderLink(): String { - return when(Constants.WeatherProvider.fromInt(Preferences.weatherProvider)) { - Constants.WeatherProvider.OPEN_WEATHER -> "https://home.openweathermap.org/users/sign_up" - Constants.WeatherProvider.WEATHER_BIT -> "https://www.weatherbit.io/account/create" - Constants.WeatherProvider.WEATHER_API -> "https://www.weatherapi.com/signup.aspx" - Constants.WeatherProvider.HERE -> "https://developer.here.com/sign-up?create=Freemium-Basic&keepState=true&step=account" - Constants.WeatherProvider.ACCUWEATHER -> "https://developer.accuweather.com/user/register" + fun getProviderLink(provider: Constants.WeatherProvider? = Constants.WeatherProvider.fromInt(Preferences.weatherProvider)!!): String { + return when(provider) { + Constants.WeatherProvider.OPEN_WEATHER -> "https://home.openweathermap.org/users/sign_in" + Constants.WeatherProvider.WEATHER_BIT -> "https://www.weatherbit.io/account/login" + Constants.WeatherProvider.WEATHER_API -> "https://www.weatherapi.com/login.aspx" + Constants.WeatherProvider.HERE -> "https://developer.here.com/login" + Constants.WeatherProvider.ACCUWEATHER -> "https://developer.accuweather.com/user/login" Constants.WeatherProvider.WEATHER_GOV -> "http://www.weather.gov/" Constants.WeatherProvider.YR -> "https://www.yr.no/" else -> "" } } - fun isKeyRequired(): Boolean = when (Constants.WeatherProvider.fromInt(Preferences.weatherProvider)) { + fun isKeyRequired(provider: Constants.WeatherProvider? = Constants.WeatherProvider.fromInt(Preferences.weatherProvider)!!): Boolean = when (provider) { Constants.WeatherProvider.OPEN_WEATHER, Constants.WeatherProvider.WEATHER_BIT, Constants.WeatherProvider.WEATHER_API, @@ -124,6 +122,17 @@ object WeatherHelper { else -> true } + fun getApiKey(provider: Constants.WeatherProvider? = Constants.WeatherProvider.fromInt(Preferences.weatherProvider)!!): String = when (provider) { + Constants.WeatherProvider.OPEN_WEATHER -> Preferences.weatherProviderApiOpen + Constants.WeatherProvider.WEATHER_BIT -> Preferences.weatherProviderApiWeatherBit + Constants.WeatherProvider.WEATHER_API -> Preferences.weatherProviderApiWeatherApi + Constants.WeatherProvider.HERE -> Preferences.weatherProviderApiHere + Constants.WeatherProvider.ACCUWEATHER -> Preferences.weatherProviderApiAccuweather + Constants.WeatherProvider.WEATHER_GOV -> "" + Constants.WeatherProvider.YR -> "" + else -> "" + } + fun getWeatherIconResource(context: Context, icon: String, style: Int = Preferences.weatherIconPack): Int { return when (icon) { "01d" -> { @@ -451,4 +460,50 @@ object WeatherHelper { 1282 -> "13" else -> "" } + if (isDaytime) "d" else "n" + + fun getYRIcon(iconCode: String, isDaytime: Boolean): String = when { + iconCode.contains("clearsky") -> "01" + iconCode.contains("cloudy") -> "04" + iconCode.contains("fair") -> "02" + iconCode.contains("fog") -> "82" + iconCode.contains("heavyrain") -> "10" + iconCode.contains("heavyrainandthunder") -> "11" + iconCode.contains("heavyrainshowers") -> "10" + iconCode.contains("heavyrainshowersandthunder") -> "11" + iconCode.contains("heavysleet") -> "10" + iconCode.contains("heavysleetandthunder") -> "11" + iconCode.contains("heavysleetshowers") -> "10" + iconCode.contains("heavysleetshowersandthunder") -> "11" + iconCode.contains("heavysnow") -> "13" + iconCode.contains("heavysnowandthunder") -> "13" + iconCode.contains("heavysnowshowers") -> "13" + iconCode.contains("heavysnowshowersandthunder") -> "13" + iconCode.contains("lightrain") -> "10" + iconCode.contains("lightrainandthunder") -> "11" + iconCode.contains("lightrainshowers") -> "10" + iconCode.contains("lightrainshowersandthunder") -> "11" + iconCode.contains("lightsleet") -> "10" + iconCode.contains("lightsleetandthunder") -> "11" + iconCode.contains("lightsleetshowers") -> "10" + iconCode.contains("lightsnow") -> "13" + iconCode.contains("lightsnowandthunder") -> "13" + iconCode.contains("lightsnowshowers") -> "13" + iconCode.contains("lightssleetshowersandthunder") -> "81" + iconCode.contains("lightssnowshowersandthunder") -> "81" + iconCode.contains("partlycloudy") -> "03" + iconCode.contains("rain") -> "10" + iconCode.contains("rainandthunder") -> "11" + iconCode.contains("rainshowers") -> "10" + iconCode.contains("rainshowersandthunder") -> "11" + iconCode.contains("sleet") -> "10" + iconCode.contains("sleetandthunder") -> "11" + iconCode.contains("sleetshowers") -> "10" + iconCode.contains("sleetshowersandthunder") -> "11" + iconCode.contains("snow") -> "13" + iconCode.contains("snowandthunder") -> "13" + iconCode.contains("snowshowers") -> "13" + iconCode.contains("snowshowersandthunder") -> "13" + else -> "" + } + if (isDaytime) "d" else "n" + } \ No newline at end of file diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/network/WeatherNetworkApi.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/network/WeatherNetworkApi.kt index ead423d..59d30fc 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/network/WeatherNetworkApi.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/network/WeatherNetworkApi.kt @@ -21,10 +21,12 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.greenrobot.eventbus.EventBus import java.lang.Exception +import java.text.SimpleDateFormat +import java.util.* class WeatherNetworkApi(val context: Context) { - fun updateWeather() { - Preferences.weatherProviderError = "" + suspend fun updateWeather() { + Preferences.weatherProviderError = "-" Preferences.weatherProviderLocationError = "" if (Preferences.showWeather && Preferences.customLocationLat != "" && Preferences.customLocationLon != "") { @@ -41,11 +43,13 @@ class WeatherNetworkApi(val context: Context) { WeatherHelper.removeWeather( context ) + + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } private fun useOpenWeatherMap(context: Context) { - if (Preferences.weatherProviderApiOpen != "" ) { + if (Preferences.weatherProviderApiOpen != "") { val helper = OpenWeatherMapHelper(Preferences.weatherProviderApiOpen) helper.setUnits(if (Preferences.weatherTempUnit == "F") Units.IMPERIAL else Units.METRIC) helper.getCurrentWeatherByGeoCoordinates(Preferences.customLocationLat.toDouble(), Preferences.customLocationLon.toDouble(), object : @@ -56,14 +60,18 @@ class WeatherNetworkApi(val context: Context) { Preferences.weatherIcon = currentWeather.weather[0].icon Preferences.weatherRealTempUnit = Preferences.weatherTempUnit MainWidget.updateWidget(context) - - EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } + + Preferences.weatherProviderError = "" + Preferences.weatherProviderLocationError = "" + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } override fun onFailure(throwable: Throwable?) { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_generic) + Preferences.weatherProviderLocationError = "" + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } - }) } else { Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_missing_key) @@ -72,95 +80,137 @@ class WeatherNetworkApi(val context: Context) { WeatherHelper.removeWeather( context ) + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } - private fun useWeatherGov(context: Context) { - CoroutineScope(Dispatchers.IO).launch { - val repository = WeatherGovRepository() - val pointsResponse = executeWithRetry(times = 5) { - repository.getGridPoints( - Preferences.customLocationLat, - Preferences.customLocationLon - ) - } + private suspend fun useWeatherGov(context: Context) { + val repository = WeatherGovRepository() + val pointsResponse = executeWithRetry(times = 5) { + repository.getGridPoints( + Preferences.customLocationLat, + Preferences.customLocationLon + ) + } - when (pointsResponse) { - is NetworkResponse.Success -> { - try { - val pp = pointsResponse.body["properties"] as LinkedTreeMap<*, *> - val gridId = pp["gridId"] as String - val gridX = pp["gridX"] as Double - val gridY = pp["gridY"] as Double + when (pointsResponse) { + is NetworkResponse.Success -> { + try { + val pp = pointsResponse.body["properties"] as LinkedTreeMap<*, *> + val gridId = pp["gridId"] as String + val gridX = pp["gridX"] as Double + val gridY = pp["gridY"] as Double - when (val weatherResponse = repository.getWeather( - gridId, - gridX, - gridY, - if (Preferences.weatherTempUnit == "F") "us" else "si" - )) { - is NetworkResponse.Success -> { - try { - val props = - weatherResponse.body["properties"] as LinkedTreeMap<*, *> - val periods = props["periods"] as List<*> - val now = periods[0] as LinkedTreeMap<*, *> + when (val weatherResponse = repository.getWeather( + gridId, + gridX, + gridY, + if (Preferences.weatherTempUnit == "F") "us" else "si" + )) { + is NetworkResponse.Success -> { + try { + val props = + weatherResponse.body["properties"] as LinkedTreeMap<*, *> + val periods = props["periods"] as List<*> + val now = periods[0] as LinkedTreeMap<*, *> - val temp = now["temperature"] as Double - val fullIcon = now["icon"] as String - val isDaytime = now["isDaytime"] as Boolean + val temp = now["temperature"] as Double + val fullIcon = now["icon"] as String + val isDaytime = now["isDaytime"] as Boolean - Preferences.weatherTemp = temp.toFloat() - Preferences.weatherIcon = WeatherHelper.getWeatherGovIcon(fullIcon, isDaytime) - Preferences.weatherRealTempUnit = Preferences.weatherTempUnit + Preferences.weatherTemp = temp.toFloat() + Preferences.weatherIcon = WeatherHelper.getWeatherGovIcon(fullIcon, isDaytime) + Preferences.weatherRealTempUnit = Preferences.weatherTempUnit - MainWidget.updateWidget(context) + Preferences.weatherProviderError = "" + Preferences.weatherProviderLocationError = "" - EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) - } catch (ex: Exception) { - } + MainWidget.updateWidget(context) + } catch (ex: Exception) { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_generic) + Preferences.weatherProviderLocationError = "" + } finally { + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } - } catch(ex: Exception) { + else -> { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_connection) + Preferences.weatherProviderLocationError = "" + } } - } - is NetworkResponse.ServerError -> { - if (pointsResponse.body?.containsKey("status") == true && (pointsResponse.body?.get("status") as Double).toInt() == 404) { - Preferences.weatherProviderError = "" - Preferences.weatherProviderLocationError = context.getString(R.string.weather_provider_error_wrong_location) - } - - WeatherHelper.removeWeather( - context - ) + } catch(ex: Exception) { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_generic) + Preferences.weatherProviderLocationError = "" + } finally { + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } + is NetworkResponse.ServerError -> { + if (pointsResponse.body?.containsKey("status") == true && (pointsResponse.body?.get("status") as Double).toInt() == 404) { + Preferences.weatherProviderError = "" + Preferences.weatherProviderLocationError = context.getString(R.string.weather_provider_error_wrong_location) + } else { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_generic) + Preferences.weatherProviderLocationError = "" + } + WeatherHelper.removeWeather( + context + ) + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) + } + else -> { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_connection) + Preferences.weatherProviderLocationError = "" + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) + } } } - private fun useHereProvider(context: Context) { - CoroutineScope(Dispatchers.IO).launch { + private suspend fun useHereProvider(context: Context) { + if (Preferences.weatherProviderApiHere != "") { val repository = HereRepository() when (val response = repository.getWeather()) { is NetworkResponse.Success -> { try { Log.d("ciao - here", response.body.toString()) + Preferences.weatherProviderError = "" + Preferences.weatherProviderLocationError = "" } catch(ex: Exception) { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_generic) + Preferences.weatherProviderLocationError = "" + } finally { + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } is NetworkResponse.ServerError -> { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_generic) + Preferences.weatherProviderLocationError = "" WeatherHelper.removeWeather( context ) + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) + } + else -> { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_connection) + Preferences.weatherProviderLocationError = "" + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } + } else { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_missing_key) + Preferences.weatherProviderLocationError = "" + + WeatherHelper.removeWeather( + context + ) + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } - private fun useWeatherBitProvider(context: Context) { - CoroutineScope(Dispatchers.IO).launch { + private suspend fun useWeatherBitProvider(context: Context) { + if (Preferences.weatherProviderApiWeatherBit != "") { val repository = WeatherbitRepository() when (val response = repository.getWeather()) { @@ -177,27 +227,53 @@ class WeatherNetworkApi(val context: Context) { Preferences.weatherRealTempUnit = Preferences.weatherTempUnit MainWidget.updateWidget(context) + Preferences.weatherProviderError = "" + Preferences.weatherProviderLocationError = "" + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } catch(ex: Exception) { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_generic) + Preferences.weatherProviderLocationError = "" + } finally { + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } is NetworkResponse.ServerError -> { when (response.code) { 403 -> { Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_invalid_key) + Preferences.weatherProviderLocationError = "" + } + else -> { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_generic) + Preferences.weatherProviderLocationError = "" } } WeatherHelper.removeWeather( context ) + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) + } + else -> { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_connection) + Preferences.weatherProviderLocationError = "" + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } + } else { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_missing_key) + Preferences.weatherProviderLocationError = "" + + WeatherHelper.removeWeather( + context + ) + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } - private fun useWeatherApiProvider(context: Context) { - CoroutineScope(Dispatchers.IO).launch { + private suspend fun useWeatherApiProvider(context: Context) { + if (Preferences.weatherProviderApiWeatherApi != "") { val repository = WeatherApiRepository() when (val response = repository.getWeather()) { @@ -216,68 +292,150 @@ class WeatherNetworkApi(val context: Context) { Preferences.weatherRealTempUnit = Preferences.weatherTempUnit MainWidget.updateWidget(context) + Preferences.weatherProviderError = "" + Preferences.weatherProviderLocationError = "" + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } catch(ex: Exception) { - Log.d("ciao", ex.localizedMessage) + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_generic) + Preferences.weatherProviderLocationError = "" + } finally { + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } is NetworkResponse.ServerError -> { when (response.code) { 401 -> { Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_invalid_key) + Preferences.weatherProviderLocationError = "" } 403 -> { Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_expired_key) + Preferences.weatherProviderLocationError = "" + } + else -> { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_generic) + Preferences.weatherProviderLocationError = "" } } WeatherHelper.removeWeather( context ) + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) + } + else -> { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_connection) + Preferences.weatherProviderLocationError = "" + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } + } else { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_missing_key) + Preferences.weatherProviderLocationError = "" + + WeatherHelper.removeWeather( + context + ) + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } - private fun useAccuweatherProvider(context: Context) { - CoroutineScope(Dispatchers.IO).launch { - val repository = AccuweatherRepository() + private suspend fun useAccuweatherProvider(context: Context) { + if (Preferences.weatherProviderApiAccuweather != "") { + val repository = AccuweatherRepository() -// when (val response = repository.getWeather()) { -// is NetworkResponse.Success -> { -// try { -// Log.d("ciao", response.body.toString()) -// } catch(ex: Exception) { -// -// } -// } -// is NetworkResponse.ServerError -> { -// WeatherHelper.removeWeather( -// context -// ) -// } -// } + // when (val response = repository.getWeather()) { + // is NetworkResponse.Success -> { + // try { + // Log.d("ciao", response.body.toString()) + // } catch(ex: Exception) { + // +// Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_missing_key) +// Preferences.weatherProviderLocationError = "" + // } + // } + // is NetworkResponse.ServerError -> { + // WeatherHelper.removeWeather( + // context + // ) + // } +// Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_missing_key) +// Preferences.weatherProviderLocationError = "" + // EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) + // } + + } else { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_missing_key) + Preferences.weatherProviderLocationError = "" + + WeatherHelper.removeWeather( + context + ) + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } - private fun useYrProvider(context: Context) { - CoroutineScope(Dispatchers.IO).launch { - val repository = YrRepository() + private suspend fun useYrProvider(context: Context) { + val repository = YrRepository() - when (val response = repository.getWeather()) { - is NetworkResponse.Success -> { - try { - Log.d("ciao - yr", response.body.toString()) - } catch(ex: Exception) { + when (val response = repository.getWeather()) { + is NetworkResponse.Success -> { + try { + val pp = response.body["properties"] as LinkedTreeMap<*, *> + val data = pp["timeseries"] as List>? + data?.let { + val format = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'") + for (item in data) { + val time = Calendar.getInstance().apply { time = format.parse(item["time"] as String)!! } + val now = Calendar.getInstance() + if (time.timeInMillis >= now.timeInMillis) { + val dd = item["data"] as LinkedTreeMap<*, *> + val instant = dd["instant"] as LinkedTreeMap<*, *> + val next = dd["next_1_hours"] as LinkedTreeMap<*, *> + val details = instant["details"] as LinkedTreeMap<*, *> + val temp = details["air_temperature"] as Double + + val summary = next["summary"] as LinkedTreeMap<*, *> + val iconCode = summary["symbol_code"] as String + + Preferences.weatherTemp = temp.toFloat() + Preferences.weatherIcon = WeatherHelper.getYRIcon(iconCode, now.get(Calendar.HOUR_OF_DAY) >= 22 || now.get(Calendar.HOUR_OF_DAY) <= 8) + Preferences.weatherTempUnit = "C" + Preferences.weatherRealTempUnit = Preferences.weatherTempUnit + MainWidget.updateWidget(context) + + Preferences.weatherProviderError = "" + Preferences.weatherProviderLocationError = "" + break + } + } } + + + + } catch(ex: Exception) { + ex.printStackTrace() + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_generic) + Preferences.weatherProviderLocationError = "" + } finally { + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } - is NetworkResponse.ServerError -> { - WeatherHelper.removeWeather( - context - ) - } + } + is NetworkResponse.ServerError -> { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_generic) + Preferences.weatherProviderLocationError = "" + WeatherHelper.removeWeather( + context + ) + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) + } + else -> { + Preferences.weatherProviderError = context.getString(R.string.weather_provider_error_connection) + Preferences.weatherProviderLocationError = "" + EventBus.getDefault().post(MainFragment.UpdateUiMessageEvent()) } } } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/WeatherReceiver.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/WeatherReceiver.kt index e0114fa..4b6f6eb 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/WeatherReceiver.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/WeatherReceiver.kt @@ -8,6 +8,9 @@ import android.content.Intent import com.tommasoberlose.anotherwidget.global.Actions import com.tommasoberlose.anotherwidget.global.Preferences import com.tommasoberlose.anotherwidget.helpers.WeatherHelper +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch import java.util.* @@ -22,7 +25,9 @@ class WeatherReceiver : BroadcastReceiver() { Intent.ACTION_TIME_CHANGED -> setUpdates(context) Actions.ACTION_WEATHER_UPDATE -> { - WeatherHelper.updateWeather(context) + GlobalScope.launch(Dispatchers.IO) { + WeatherHelper.updateWeather(context) + } } } } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activities/WeatherProviderActivity.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activities/WeatherProviderActivity.kt index 699d017..2052d51 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activities/WeatherProviderActivity.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activities/WeatherProviderActivity.kt @@ -4,8 +4,10 @@ import android.app.Activity import android.content.Intent import android.content.pm.ResolveInfo import android.os.Bundle +import android.util.Log import android.view.View import android.widget.ImageView +import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.core.view.isVisible @@ -15,37 +17,44 @@ import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import com.bumptech.glide.Glide +import com.google.android.material.snackbar.Snackbar import com.tommasoberlose.anotherwidget.R import com.tommasoberlose.anotherwidget.components.BottomSheetMenu +import com.tommasoberlose.anotherwidget.components.BottomSheetWeatherProviderSettings import com.tommasoberlose.anotherwidget.databinding.ActivityChooseApplicationBinding import com.tommasoberlose.anotherwidget.databinding.ActivityWeatherProviderBinding import com.tommasoberlose.anotherwidget.global.Constants import com.tommasoberlose.anotherwidget.global.Preferences import com.tommasoberlose.anotherwidget.helpers.WeatherHelper +import com.tommasoberlose.anotherwidget.network.WeatherNetworkApi +import com.tommasoberlose.anotherwidget.ui.fragments.MainFragment import com.tommasoberlose.anotherwidget.ui.viewmodels.ChooseApplicationViewModel import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel +import com.tommasoberlose.anotherwidget.ui.viewmodels.WeatherProviderViewModel +import com.tommasoberlose.anotherwidget.utils.collapse +import com.tommasoberlose.anotherwidget.utils.expand import com.tommasoberlose.anotherwidget.utils.openURI -import kotlinx.android.synthetic.main.activity_choose_application.* +import com.tommasoberlose.anotherwidget.utils.reveal import kotlinx.android.synthetic.main.activity_weather_provider.* -import kotlinx.android.synthetic.main.activity_weather_provider.action_back -import kotlinx.android.synthetic.main.activity_weather_provider.list_view import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import net.idik.lib.slimadapter.SlimAdapter +import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode class WeatherProviderActivity : AppCompatActivity() { private lateinit var adapter: SlimAdapter - private lateinit var viewModel: MainViewModel + private lateinit var viewModel: WeatherProviderViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_weather_provider) - viewModel = ViewModelProvider(this).get(MainViewModel::class.java) - api_key.editText?.setText(Preferences.weatherProviderApiOpen) + viewModel = ViewModelProvider(this).get(WeatherProviderViewModel::class.java) list_view.setHasFixedSize(true) val mLayoutManager = LinearLayoutManager(this) @@ -53,91 +62,119 @@ class WeatherProviderActivity : AppCompatActivity() { adapter = SlimAdapter.create() adapter - .register(R.layout.list_item) { item, injector -> - val provider = Constants.WeatherProvider.fromInt(item)!! + .register(R.layout.weather_provider_list_item) { provider, injector -> injector .text(R.id.text, WeatherHelper.getProviderName(this, provider)) - .clicked(R.id.text) { - Preferences.weatherProvider = item + .clicked(R.id.item) { + val oldValue = Preferences.weatherProvider + Preferences.weatherProvider = provider.value + updateListItem(oldValue) + updateListItem() + loader.isVisible = true + + lifecycleScope.launch { + WeatherHelper.updateWeather(this@WeatherProviderActivity) + } } - } - .attachTo(list_view) + .clicked(R.id.radioButton) { + val oldValue = Preferences.weatherProvider + Preferences.weatherProvider = provider.value + updateListItem(oldValue) + updateListItem() + loader.isVisible = true + + lifecycleScope.launch { + WeatherHelper.updateWeather(this@WeatherProviderActivity) + } + } + .checked(R.id.radioButton, provider.value == Preferences.weatherProvider) + .with(R.id.text2) { + if (WeatherHelper.isKeyRequired(provider)) { + it.text = getString(R.string.api_key_required_message) + } + + if (provider == Constants.WeatherProvider.WEATHER_GOV) { + it.text = getString(R.string.us_only_message) + } + } + .clicked(R.id.action_configure) { + BottomSheetWeatherProviderSettings(this) { + lifecycleScope.launch { + loader.isVisible = true + WeatherHelper.updateWeather(this@WeatherProviderActivity) + } + }.show() + } + .visibility(R.id.action_configure, if (/*WeatherHelper.isKeyRequired(provider) && */provider.value == Preferences.weatherProvider) View.VISIBLE else View.GONE) + .visibility(R.id.info_container, if (WeatherHelper.isKeyRequired(provider) || provider == Constants.WeatherProvider.WEATHER_GOV) View.VISIBLE else View.GONE) + .with(R.id.provider_error) { + if (Preferences.weatherProviderError != "" && Preferences.weatherProviderError != "-") { + it.text = Preferences.weatherProviderError + it.isVisible = provider.value == Preferences.weatherProvider + } else if (Preferences.weatherProviderLocationError != "") { + it.text = Preferences.weatherProviderLocationError + it.isVisible = provider.value == Preferences.weatherProvider + } else { + it.isVisible = false + } + } + .image(R.id.action_configure, ContextCompat.getDrawable(this, if (WeatherHelper.isKeyRequired(provider)) R.drawable.round_settings else R.drawable.outline_info_white)) + }.attachTo(list_view) + + adapter.updateData( + Constants.WeatherProvider.values().asList() + .filter { it != Constants.WeatherProvider.HERE } + .filter { it != Constants.WeatherProvider.ACCUWEATHER } + ) setupListener() subscribeUi(viewModel) } - private fun subscribeUi(viewModel: MainViewModel) { - adapter.updateData(Constants.WeatherProvider.values().map { it.value }) + private fun subscribeUi(viewModel: WeatherProviderViewModel) { + viewModel.weatherProviderError.observe(this) { + updateListItem() + } -// viewModel.weatherProvider.observe(this, Observer { -// weather_provider.editText?.setText(WeatherHelper.getProviderName(this, Constants.WeatherProvider.fromInt(Preferences.weatherProvider)!!).split("\n").first()) -// -// api_key_container.isVisible = WeatherHelper.isKeyRequired() -// -// WeatherHelper.getProviderInfoTitle(this).let { -// info_title.text = it -// info_title.isVisible = it != "" -// } -// -// WeatherHelper.getProviderInfoSubtitle(this).let { -// info_subtitle.text = it -// info_subtitle.isVisible = it != "" -// } -// -// action_open_provider.text = WeatherHelper.getProviderLinkName(this) -// -// api_key.editText?.setText(when (Constants.WeatherProvider.fromInt(it)) { -// Constants.WeatherProvider.OPEN_WEATHER -> Preferences.weatherProviderApiOpen -// Constants.WeatherProvider.WEATHER_BIT -> Preferences.weatherProviderApiWeatherBit -// Constants.WeatherProvider.WEATHER_API -> Preferences.weatherProviderApiWeatherApi -// Constants.WeatherProvider.HERE -> Preferences.weatherProviderApiHere -// Constants.WeatherProvider.ACCUWEATHER -> Preferences.weatherProviderApiAccuweather -// Constants.WeatherProvider.WEATHER_GOV, -// Constants.WeatherProvider.YR, -// null -> "" -// }) -// }) + viewModel.weatherProviderLocationError.observe(this) { + updateListItem() + } + } + + private fun updateListItem(provider: Int = Preferences.weatherProvider) { + (adapter.data).forEachIndexed { index, item -> + if (item is Constants.WeatherProvider && item.value == provider) { + adapter.notifyItemChanged(index) + } + } } private fun setupListener() { action_back.setOnClickListener { onBackPressed() } - - action_open_provider.setOnClickListener { - openURI(WeatherHelper.getProviderLink()) - } - - weather_provider_inner.setOnClickListener { - if (Preferences.showWeather) { - val dialog = BottomSheetMenu(this, header = getString(R.string.settings_weather_provider_api)).setSelectedValue(Preferences.weatherProvider) - (0 until 7).forEach { - val item = Constants.WeatherProvider.fromInt(it) - dialog.addItem(WeatherHelper.getProviderName(this, item!!), it) - } - - dialog.addOnSelectItemListener { value -> - Preferences.weatherProvider = value - }.show() - } - } - - api_key.editText?.addTextChangedListener { - val key = it?.toString() ?: "" - when (Constants.WeatherProvider.fromInt(Preferences.weatherProvider)) { - Constants.WeatherProvider.OPEN_WEATHER -> Preferences.weatherProviderApiOpen = key - Constants.WeatherProvider.WEATHER_BIT -> Preferences.weatherProviderApiWeatherBit = key - Constants.WeatherProvider.WEATHER_API -> Preferences.weatherProviderApiWeatherApi = key - Constants.WeatherProvider.HERE -> Preferences.weatherProviderApiHere = key - Constants.WeatherProvider.ACCUWEATHER -> Preferences.weatherProviderApiAccuweather = key - else -> {} - } - } } override fun onBackPressed() { setResult(Activity.RESULT_OK) finish() } + + override fun onResume() { + super.onResume() + EventBus.getDefault().register(this) + } + + override fun onPause() { + EventBus.getDefault().unregister(this) + super.onPause() + } + + @Subscribe(threadMode = ThreadMode.MAIN) + fun onMessageEvent(ignore: MainFragment.UpdateUiMessageEvent?) { + loader.isVisible = Preferences.weatherProviderError == "-" + if (Preferences.weatherProviderError == "" && Preferences.weatherProviderLocationError == "") { + Snackbar.make(list_view, getString(R.string.settings_weather_provider_api_key_subtitle_all_set), Snackbar.LENGTH_LONG).show() + } + } } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/MainFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/MainFragment.kt index 9e806c1..53e98b7 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/MainFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/MainFragment.kt @@ -39,10 +39,7 @@ import com.tommasoberlose.anotherwidget.ui.activities.MainActivity import com.tommasoberlose.anotherwidget.ui.adapters.ViewPagerAdapter import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget -import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission -import com.tommasoberlose.anotherwidget.utils.getCurrentWallpaper -import com.tommasoberlose.anotherwidget.utils.isDarkTheme -import com.tommasoberlose.anotherwidget.utils.toPixel +import com.tommasoberlose.anotherwidget.utils.* import kotlinx.android.synthetic.main.fragment_app_main.* import kotlinx.android.synthetic.main.the_widget_sans.* import kotlinx.coroutines.* @@ -76,6 +73,7 @@ class MainFragment : Fragment(), SharedPreferences.OnSharedPreferenceChangeList override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) + subscribeUi(viewModel) // Viewpager @@ -352,11 +350,11 @@ class MainFragment : Fragment(), SharedPreferences.OnSharedPreferenceChangeList backgroundColor = ContextCompat.getColor(requireContext(), R.color.errorColorText) badgeGravity = BadgeDrawable.TOP_END }?.isVisible = if (Preferences.showWeather) { - (WeatherHelper.isKeyRequired() && Preferences.weatherProviderApiOpen == "") + (WeatherHelper.isKeyRequired() && WeatherHelper.getApiKey() == "") || (Preferences.customLocationAdd == "" && activity?.checkGrantedPermission( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) Manifest.permission.ACCESS_BACKGROUND_LOCATION else Manifest.permission.ACCESS_FINE_LOCATION ) != true) - || (Preferences.weatherProviderError != "") + || (Preferences.weatherProviderError != "" && Preferences.weatherProviderError != "-") } else { false } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/SettingsFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/SettingsFragment.kt index e63af16..53ab98b 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/SettingsFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/SettingsFragment.kt @@ -193,7 +193,9 @@ class SettingsFragment : Fragment() { } action_refresh_widget.setOnClickListener { - WeatherHelper.updateWeather(requireContext()) + viewLifecycleOwner.lifecycleScope.launch { + WeatherHelper.updateWeather(requireContext()) + } CalendarHelper.updateEventList(requireContext()) MediaPlayerHelper.updatePlayingMediaInfo(requireContext()) } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/WeatherTabFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/WeatherTabFragment.kt index 02d8a3c..0ab97d5 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/WeatherTabFragment.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/WeatherTabFragment.kt @@ -188,7 +188,7 @@ class WeatherTabFragment : Fragment() { } private fun checkWeatherProviderConfig() { - weather_provider_error.isVisible = Preferences.weatherProviderError != "" + weather_provider_error.isVisible = Preferences.weatherProviderError != "" && Preferences.weatherProviderError != "-" weather_provider_error?.text = Preferences.weatherProviderError weather_provider_location_error.isVisible = Preferences.weatherProviderLocationError != "" @@ -233,7 +233,9 @@ class WeatherTabFragment : Fragment() { .addItem(getString(R.string.celsius), "C") .addOnSelectItemListener { value -> if (value != Preferences.weatherTempUnit) { - WeatherHelper.updateWeather(requireContext()) + viewLifecycleOwner.lifecycleScope.launch { + WeatherHelper.updateWeather(requireContext()) + } } Preferences.weatherTempUnit = value }.show() diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/WeatherProviderViewModel.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/WeatherProviderViewModel.kt new file mode 100644 index 0000000..fd6ecc3 --- /dev/null +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/WeatherProviderViewModel.kt @@ -0,0 +1,19 @@ +package com.tommasoberlose.anotherwidget.ui.viewmodels + +import android.app.Application +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.chibatching.kotpref.livedata.asLiveData +import com.tommasoberlose.anotherwidget.R +import com.tommasoberlose.anotherwidget.global.Constants +import com.tommasoberlose.anotherwidget.global.Preferences + +class WeatherProviderViewModel(application: Application) : AndroidViewModel(application) { + + val weatherProvider = Preferences.asLiveData(Preferences::weatherProvider) + val weatherProviderError = Preferences.asLiveData(Preferences::weatherProviderError) + val weatherProviderLocationError = Preferences.asLiveData(Preferences::weatherProviderLocationError) + + +} \ No newline at end of file diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widgets/MainWidget.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widgets/MainWidget.kt index 5627144..96b7dd5 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widgets/MainWidget.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widgets/MainWidget.kt @@ -32,10 +32,7 @@ import com.tommasoberlose.anotherwidget.global.Preferences import com.tommasoberlose.anotherwidget.helpers.* import com.tommasoberlose.anotherwidget.helpers.ColorHelper.toIntValue import com.tommasoberlose.anotherwidget.receivers.* -import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission -import com.tommasoberlose.anotherwidget.utils.getCapWordString -import com.tommasoberlose.anotherwidget.utils.isDarkTheme -import com.tommasoberlose.anotherwidget.utils.toPixel +import com.tommasoberlose.anotherwidget.utils.* import kotlinx.android.synthetic.main.the_widget.view.* import java.lang.Exception import java.text.DateFormat @@ -661,14 +658,11 @@ class MainWidget : AppWidgetProvider() { if (Preferences.isCharging) { v.second_row_icon.isVisible = false val batteryLevel = BatteryHelper.getBatteryLevel(context) - if (batteryLevel == 100) { - v.next_event_date.text = "%s - %d%%".format( - context.getString(R.string.charging), - batteryLevel - ) + if (batteryLevel != 100) { + v.next_event_date.text = context.getString(R.string.charging) } else { v.next_event_date.text = - context.getString(R.string.charging) + context.getString(R.string.charged) } showSomething = true break@loop diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/utils/Extensions.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/utils/Extensions.kt index 7b71399..d6278cf 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/utils/Extensions.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/utils/Extensions.kt @@ -95,7 +95,7 @@ fun View.expand() { } } -fun View.collapse() { +fun View.collapse(duration: Long = 500L) { if (visibility != View.GONE) { val initialHeight = measuredHeight @@ -114,7 +114,7 @@ fun View.collapse() { } } - a.duration = 500L //(initialHeight / v.context.resources.displayMetrics.density).toLong() + a.duration = duration //(initialHeight / v.context.resources.displayMetrics.density).toLong() startAnimation(a) } } diff --git a/app/src/main/res/drawable-hdpi/round_call_made.png b/app/src/main/res/drawable-hdpi/round_call_made.png new file mode 100644 index 0000000000000000000000000000000000000000..74fb74b2d8ad774b38fc39f689eb6a0c5c20267a GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^W+2SL1|)l2v+e?^8=fwXAr*{ouQ#$D4iIU5sGwmL z!oXqW#P&i%QiY?7p-EwJNkh*EaVA!G?TO_U_WTte9>(QO4f4`lI;D$yMWdKR?7WX@dX& literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/round_call_made_white_18.png b/app/src/main/res/drawable-hdpi/round_call_made_white_18.png new file mode 100644 index 0000000000000000000000000000000000000000..9556f3c73327bc174784fd1965900f850f3ef762 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i1|)m0dVtk;~1o zq$97zik6NIETR zH@m&dAW8oi)2%|5FqYmMOsgB(!W%;!8?QQciaK>}ZBts)ke#h@sD<4xHQ>s^@`zOn iILdXV2CNsiWsIsgF}L$n{A{387(8A5T-G@yGywp4K}TZ% literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/round_call_made_white_24.png b/app/src/main/res/drawable-hdpi/round_call_made_white_24.png new file mode 100644 index 0000000000000000000000000000000000000000..aca36b11f41f07ac1dcba03c0daccd9b6ed36050 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBx;$MRLn;{GUTtJOU?Adpae*=` z>y(}ej8%_i4!cY06Ymv%+j= zVJ0$s)6>FVdQ&MBb@01+EQBLDyZ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/round_call_made_white_48.png b/app/src/main/res/drawable-hdpi/round_call_made_white_48.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0618790eca4fc3918c89d6c33b755019dc2ff4 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!?>t=`Ln;{G-c;mpG8AbGJly?F z?(JUbH#auRE(XDa2^-X{*{r{%Y%msQX)b#2eBtWod384h}45f=Wld+vih=Wb8?{;a_6 z|L(i5u9eEpX=`F;=aaE0c(5hDhdG@~oz3b%XQNp`(gII=8IRe|OJ@sRoDXuTiYBd=qxIAj+v-+AQhT`9`%s>fo-{^?T2m;Vi{D-L}5Xm{LpDSNg{b%T&q zM;5;s^K;oL0edW6^#YvD0vz);aGc;$QsCb4X^o2WtLuvCiH(n9kLu(ET-$8mRMnn# uf{W>`=%s|W2e&cgPhgYYu;k*4@3G}851)Q7b>a}vSqz@8elF{r5}E-0eo9XO literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/round_close_white_24.png b/app/src/main/res/drawable-hdpi/round_close_white_24.png new file mode 100644 index 0000000000000000000000000000000000000000..ee337f8a05371186038acb15cc42696090260d1f GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBmUy~2hEy=Vz1GOu5Fpa}@PfzN z3jzxT?=kQevU4h$cs>4eP?`0GOyv%HhWEb?eB5>I^d=o%)2G;Xk|H7ER9{6SVhf#Qzi^EF^*{8=}XxO_s{WP>X)qgQi>)8H4hNX->U7wPf zB3P%0FV@*5A1oYD*VFJRxz3&Ow6yY@D^LC{XtkKv&TJBXMM=429FJmfJPN?^C;-Q!ARLe4a6F2~@hA$%p@3idd-4BKJdQ`^nu23&qv}DzqYG1to0000k! zTXWT`N`pDswnq=nc^#wiXW_Y4r;YP=RzHjRbIkYNHkqB@)xOv8ncMHQoII=eoaOU5 z5aIxv1p{-0(EAEzwhxSZLJrDdf$LqeBN)pMi!aKe3nNsk?%J%U6^}cy3>MT zG1G;4`=vcC7~YFEq&?8)@;tE9CzL5pc>>EEZ3F+GFFkY%OO~`*SOq!D$gWiE>$@W0 z?w-}LSlRT*#fi5bzVNW}Gge_e?(x&&r^m626MK|vv>OuV{Fgpvc*&}7;+LNb^0&KL zY~FWQ>fwvqYtghzJ$m7>x8T#nPlZwnD=i#7mTOs9v#LvEu4E_?E?6|tjdj812I1b4 z6%1QAEGByJCrn6P)Nkl76hRRb!!QKH5DY;O3_}1xPy|H~ zJcGlDlYeVd(3cP1|L)%VzB}*#=5+%H=-?Uy3~`GqobF4cg&rR4#sXa&JXNTJ<&NSN z=J@cxLYLS89?{1n6>MV#7~y6s{_J0c&Qjt8$9OM*j}g~R#Sd|Ux!@Xa7)h%n)C#^2 znCE$>*w4YeOM>&AGmPgDMcRpv0?*QY(ourrP?%KSy{bEszaqeYsT8Rw+V|3CP z0%n;{X9@VS#s2|ZRbnGRziz^}`bA8uqPPd#R!L((FZ1bU!^}72<>k4rl72KKeXYez z(xz5T4uUF+{@l~de#=c{;FFg@rxH8D#(wcY?IQV|7dTA(640$3$FIa4<1x*@2HMF* zM$uJX|5=KCo0~{3G==!qYBJ*s2z*bDo@bC}ybc3yr_J0%Tr<$i{)Wp`Xc`SHQbS#= zlF&tiM0vxt8Z$LkjX%zY84fjX=^8h&RL=vBVn%o2G-He~z$s O0000yzTSNOy!Zb5Z+!SKU>_~qp@-+`r;85GvAgOLTWDZtego83QRWCw z7S~60S!G&Mj1}FZFHG=9(JM~hQ)CkzMKAb@V_||F94M;dY(}w*MGIXh>YzN$dO|DK zXbYX`cNIJe-aIKBE4qx#fiOWiGJC=+KE;91NwVr&PSZ%}B>AOqGh_XO&`7qxqtKtX zP*WIUJISAf+Klz5!mlK&Bzvkp&veGtXOJ&M&HC-;3SC>j^IV~xP@R#th5DTPur(t; z5jwd-L!p#EK@Ky&Q_r77dqOu;C?wIc3sr>Ybrd=g+B5PUVVEm461G-2q0ho&u25e% zn33Nuu&FO*cSY?*iEKW!wH6pZr}TI*hXrg=mrnMBqb%707*qoM6N<$f(;D% A4gdfE literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/round_language_white_36.png b/app/src/main/res/drawable-hdpi/round_language_white_36.png new file mode 100644 index 0000000000000000000000000000000000000000..5b67983636f2f5bfc56b3f1222b89d0f12d03b59 GIT binary patch literal 871 zcmV-t1DO1YP)B!Ky!3M5z=8F8oySwGVRK^@OPEVrkQNTnM-wZ2 zzy@abF;E@H_%8(bgq3{=bcQ2Lnnx`Bk3d=cgS#ZaK4!iuQ~@XG$`Iesl@aE49jb~8 z!-wynvceNAV}PIW@zU^&&akwrP!||r7%zCbsk=wz>eF?8q0-yDc8-&n5ww(as3I;= z39uu>y@sFTk<{o^u)w3u>lwU>>A8GTp^kBa$^t7=+eM`la?Lwb8dCEeeN;x6Ng~(~ zl{pqeYGARiON$hoj$_RTgE_L9*o~1hX%?$NAQm<@-l~Ji1-lLQ4t!GKd_GfCS@1T;iX{d%u z(XoerIt1&Rd%!sVm24Vnp^}NI|AtD_Ay{uMSnLOt>h=xoPcU^M$skJOZ!7lX@o#bWz1Gt{?H$=jahD$jc~LBG26 zu!eibv@moDc8zJF9Q}i zuMS7+18+-o(K(L@SF|`=Y}%|3p&imw3sl}Qo8&K-J}OJB8y2Wj%t&u(FRU;t3vnNn z1s1#{(F0UrfcZ_`BPuP!Be9EzfNI21)u1cyU$D2k#u9D+ko6h(0eio+oY zf+8r2VDUY8I5j&rZzoOLbUy$)X7guecIMxI8?{=kR;$(i4{Tr;9h{= z2)kIF=YYJy7S1qI-2k7lIWK`(!&ls!zA;X*{1OARjB~Rw!7*AdAuuf*V`BF1aELe0 zH8^i^=jn~G_S}MVfI_|=ZsfbihsIMw6X()Q(8VP3quN-H1bd7g3TZk|8Js0tC$0@0 zEaIbb2aW&WM7eip<4fXN*Tuq9>}&e|>=dovM%z%>0L=%B{hhGu->z$;n-Zj12k5J~ zAvPYg*->sg(8s=Vn-8wt#@(}+Za5Ox3++kpL)cAZl->&a7T$a5i+J>f8}CpkcaCOw zN1Z-;5=K#h#lZCoxK!>QYmd1o-^YRzY5OHI6`Qe*XQa>l$dmP2xzVF+CUK@*PyC0D zqED^}oJ1DuAS{Sax5H@%X9b0@LF^oaO<@I=68c_Ot{p!Q8VkFd>e&t7g%!l-G(HQv zY$U=!*gpwtW|=S33eKi-#|iC!3fpTW!Y5(9gtlE_lc}UiaAAI(<_2dGh50qk4bYDH zx0w^5uK9PIb0EDp{{}f3!q;N8N`N}?BSjq6GXAk36vA4G?XQIGPV;E-G5KH{c9jvJ zp|HOa+aC)%s&X?uVH=6--1e@|Rj`0(C z{u-u}5uo$T04+<;48*}J3ea#~0(6#h@I_nLsLIXUzM>KIqsq8_IopY%x@*Oe?PUf2hKC+`*wOJF*~!kmYI0#WE?fBMH}nFeq{t`B5W~p zR#ZA_y!U#nR|(JpCg$JhvGUP%UK)Gm-&Rh5+UDCmnvEQ|Hov}3tD>XKLB`%?C%@#z zWyZVxA~n&LvxA*rx#A6e&p-A!NIzO+?&vcL2>P*d5^P0++e+wrRk@Y;OHac{-|faU zp{v|kyb{(pR(w#g_~9nrrwfQ>HD_4@1D`77aegMen;Q!|s`zK-m%e1|i#io5M7ApS z*RD{vT}1ku4xETPMKiq&##LmR3{uNp&_Yk#{;aC&FU9pAKHcz9xxdq28-aI$hsaRe z*{r|n8Hk(U5Y2?L-hN>184+Kcv4CR~;;zta%o0}d%byLfizYfiJSRi^I=sO?ZvEL0 zEIsA-VVBa}iho}*Mhh$A*PP%^RJ?9`rqINR={U!gd<700&k6QWczXAE+jx$!g081g z;1o+Q<-7PRv(v>&C|eqTCG<57cOXwws2Y~@&Et;07*qoM6N<$g6S6;_y7O^ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/round_pageview_white_18.png b/app/src/main/res/drawable-hdpi/round_pageview_white_18.png new file mode 100644 index 0000000000000000000000000000000000000000..ae809cfde73d27568e8d46db3c476a7daaf46926 GIT binary patch literal 296 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i1|)m0d$`{Ln;{GUSVW86d=<2P(ZTF{6tbJnFBWrg<^7ymdsYXZr zW-TjS^H4Kl;WSedH>R_DE^O?LeW;{Uh!>K^1L1C ztpe^_&TiF8TDx)A%jMJ5Av{msw%L1w`}x3qcRqLSZa%L;1|#s^0MbQ49f)4X3K~K5hDOkKw#lFm z=>5@$a$7-tIQ-}QUATc+WKg!m+jySbV4%D%8@1Q9(g?k2ta-P)n2A)B0 z!fP6jq%FJ)&!7k4T^U|3ynWB0On7&OHx^#QGpH-P)bL(~mv{z!tDo>Y=*{3rc-P*q zeJb2N=t2Qg$l*j?@5?*r2O6m6Lhg{*CnT#xMf}Sqa1V+4HeJFHPIZ)D(DK1L>LobH zj?&+*&>$6+K^uy7f+i5X+zRSJ^jcO>9d2O^-Yek|YCD0eR;}7Ee4op_sN1eB00000 LNkvXXu0mjfD0Z1u literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/round_pageview_white_36.png b/app/src/main/res/drawable-hdpi/round_pageview_white_36.png new file mode 100644 index 0000000000000000000000000000000000000000..6ab4f4bdfaf47ebf3b028f22ff9904bda13d48a7 GIT binary patch literal 506 zcmV0)#NYAwUSj0K*UfhG7W90EZAD4B>D%ghTr< zO#Yr%V*i`>@!@js)z^9Fc^4j!$K&yM9AdZIHSq!NG4Y{C+BjnRJ%Oa3A(!}X83>tQJlFcjv$!UQ)ih2?l}`SuNP=0eyC8z*c8 zdRS@=%fu-AxPjKNTf??&g3ma`E(QngoofqQ2y;|0!4mgbV_O&#VyP+YPMBkgCQ6K? zr=}^ax;MUM`Ol}qclWh~Nk49aw#34kR1qevuUE8XAgnXBVT)7OC)YJCVM}5B3~dR8 z^{M9N5eVyKd*ag`Y6|NMbBxhMfpuZryQZ*IoQGh{ai33Y3in4Ew^YLeb5*f}518N$ zRt%eAbzucYXE^d3=?VkLFg{0|t}uWS6ZtqyTvOMEIF&~O8=PQ_)n9Yhv4?XkvB206 zr!LGMbKIl5VTL$9Yq%aJ#&O+oHcW^cVt_HG?uN;fcno8^<1qJ#ZNfq<&=tNgus`Q> wgHk^FGsm^@L+R7Y@eQL3ckp;T9*@WK4V%gso8$XS8vp}1z2fAI;nXp^KKpAlo(5+LTpBuVe7}O!qjPywv=jdaM2}bDQ zw2^=V%u5f{Nq<2P(gvyB4!0!-nxR=S_YgBLGp>q+78a!j>Lu2X(Yo$ya93)ecE!xL zJf{`&I;93W%D7|7`9;1jGEidXT%J+lC{n9Hxu)rv^$E0)XPnr{$_td(nuqfAYqbX9 zJY(0%nb$5g(ASEYO-#McL!$!vB|k~;RLnib{1tN!D(38#{3H#RiP^`PN*m!YG2;eG z4m3eCF~5lphFAdRxJMg1=_?P<2` zsJPx#07*qoM6N<$f*Sk@ AzyJUM literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/round_public.png b/app/src/main/res/drawable-hdpi/round_public.png new file mode 100644 index 0000000000000000000000000000000000000000..41899cfffabb4b7d6c84e163d29e1be12c9a0d92 GIT binary patch literal 952 zcmV;p14sOcP)fiei9a7=q!$hoUHoVknBDD2iYhf}jY7A}EHUD2gH| zh9C$IzYmJxwUX=Iy-VE>fW9XGBzNz0E{vppB8|O|e<#L3t{j8?1(iNTgq$H!fu| ziF0Y(Vt79b`%pN`MX~;wFWz-7rw1P!fFdywgwwY(ers#ecZ7LbggU zT=GC2%*34+v3-##StuEf#r+Adfv+l1(FR^7F8}r|`pS0|Du7FIC;1noOj9i#DmLd0J7&Bh^08M{)f;gN;Q*HtqXM6lg=-C@gB;Hyn>t+dymL9*PeXk5r~hd@5i@ z9W%}|*rT|A5=MgmO85p{=Nar~o=H`LNH-xTY>FEcxy|u0L{u3m@dpzElM8|J0d*vFU9iCttnYdoj&sGq3i*}d;zAIn<4QsF(KnvHaVsj~HMd+lrUrAk+!E$fP&LZm1)4@KYKY&at{I&&6M<&H$aT zY_N-wa%31{D=a&#;v0sT$#052zG5Z3MQGzQj?lvpH+TfV7{76e3mjp0kyCb~(P%Up ajsF4VqI=7vBC~w}00001yLVSoaLAqa+|2!^7_ ze!TF^<>e&`^zqT=&*e+6@9wTHyXv|&zy~XkfD~*%2&U(fj6nnrK&l_G1ZJqn2Yb+` z3gGn>Ex<`BC_&8b{{=IxXr>iWg*5IS6in!Ki5yS?sSco|2fqN9jlXNAo^m6}V$fAV z#|wLGW|mUt9rZF%m^NM7cEemD`UVq)?3Rt0+HOcFEG!M;6K;==E}I6jg*k<5@W_P& z*XfpqZ*1WQg%N${!l;F3U|M9aG&YmoWKEa2P^zp&mQkKaZ}LW$w8FAQwxfJy3j+!( zU}T{z!?g)-E}P6{4-ACv(#RsV+nBD!SOUk^Ktg>2AKb7lFOu5zn(ZPvFf4me?3;VA zW1q*Gl+a@U;sv{C5gJfe~e?LbMoifbxyGqF?$Yh$_XwDgKA4VqqUa sOjAC%__7FS;cuxkbC7^JHNpkg9}LO`m2O$AKmY&$07*qoM6N<$f&r<)u>b%7 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/round_public_white_24.png b/app/src/main/res/drawable-hdpi/round_public_white_24.png new file mode 100644 index 0000000000000000000000000000000000000000..635d23462b85d143f4e8d9ce63a0abeb466bdeba GIT binary patch literal 502 zcmVzz`I}07DQIK@k*15I`^l z!8Zs8p5x}_1=fCC;7I;=-#Pcbqi5j-F3`svrg++}3C8H*{Lmqe(Zxc!IXZ_3)5fFv zX1HuBOkXoL__XgU8mq6rT`K_wbpzd~Z;jUWcg`>s?7UOBwx8R4w{41h3MW`9_Xqu0 zJ|rzL6=sKO;{H(~yv9oCl|x;*(Tsr$K8p!}}9$WKw$LOZ$d>IUlO z4V}M|2OL+_d{u5@`~8C!mO{5A&?~HjLG_ea+s#M(79QhabFr<-li(6#Y?O(*q#a5p z4u&|X*-s_?mBR@p0?ct$KTv*|mWCQZMX(;;|dOMH?f`uoM=!#}HQ$gQRCW761SM07*qoM6N<$g4`z9tN;K2 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/round_public_white_36.png b/app/src/main/res/drawable-hdpi/round_public_white_36.png new file mode 100644 index 0000000000000000000000000000000000000000..1f12d40a2ce378958dfa8cadcc0b2376eb7e4ab0 GIT binary patch literal 758 zcmVacF(_xzI?#zYQJ}Nbv5tW<#z4bcDv2s0TncN%E%#oNkh_TVT271wZ;Gqq|R|r z6`x2_gfWWeFsOh4)(zpGVo(YLxGcg4ZjLo7iy4kpfQ;)=B`jgx7p4dPJ?Cmv84+AG z*xg4B;hr;S&U%!O6=RkC2fU37^91O#m~@yEP|h8*c3?%3?4OI$cA40WmlMfTgH`){-73T)pu&QS`tPWWt&J9dpRo-yeE#w=8f&OCgZ*_!Mc{(>5HbP$VL8akngcugerP%F1jFtj zYbF~e$0cup4sK%%yMwHyIq(UxwDCAuJ>hSxqB*bzneUOqapM@nijX~MKT?xbJ#siM zh%xLLvW)g)X<64J{Wzz?`r_D)r%ismMxjRz#|1GiU*vs^;tYF(%vX+EIviHfpAq$M ztNO}g1Bb(gd(PPEao_UV2ia2%+kG7+`}8y^&OU=9e5w_qhpfEFRGh8VPt-YNb z2AT%1YyL6+Fl7SQjS`jMVcpd2Lr?z>oCdPSznR-mI)1)}haN%yZ7~u%7 z@d91!;Q+@NW9e>_MqEkQ!bsi?PX6@+VH>Bol{dsz>4Cn;8)D}Hj|dZaM8d)-8}-KJbUb3EJN&z4(hXQfT+RX%Qb>{Drr zVrDeFkv8A-o5VJj()LTA+WR$)KbH2Xlt5!??`j(VSlZ800xceMCc%NUX(@rOrFCjt zYf8B+CD5gW8pnU$$Utbu0LJEh`q>B2xPJa73C~87KY$5U^L+$@~yP2qASgkcB}h7baTFbu3_j<;i!aX$hqVqz1(q~iV>kj2NC{W7+S ziQNKn)GF*B0kfD`OJP{y=t1;>V+07eD*3`b086B?u@no1XY|m;B_0qIhG-_S(7=;& z8ODH593`8;Ii^?x)_6xBb+i%Uf)UW$yI^CN!B(fhBCAhaPs(nMX($SNQb3C-hO)9a7@d&po13XUqts-f@i! zj4+j&V6Bdzq0~LrzJIP9NyEli$r-aHH9$H0IWrM1a|Yc~{lw@=b#lbCg%7M&+}{X; z96@`+sQTW4aFZiwARJfU+Z0|GA*h`@=t#J#zSk8Va|CS*Z`Jn>v%dOhVJhra{Q15J zdqoa77v6vR)y1iFx0EYr6%*kB?HN~fDAg-+!nV{D$LPlGv5r1or5=hpU>~2V84JTY zqBihswki53rOxVzDzSr0jD-)}qmSh{-d(<^4AA;(QBBlf(W1u1yrG2=;G|d-XchlS aqwxi&E5nTKM2krP0000Nkl3}FZ%gu@Vq5Dr5K!{KmP zU%>OXYt~-x-PZf^0qmXM%I%!z`m0}U#)IMYvny(Q;ZDe9t0NIh|YdkY2dD7}8v0Ry00000NkvXXu0mjf--P(_ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/round_call_made.png b/app/src/main/res/drawable-mdpi/round_call_made.png new file mode 100644 index 0000000000000000000000000000000000000000..aca36b11f41f07ac1dcba03c0daccd9b6ed36050 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBx;$MRLn;{GUTtJOU?Adpae*=` z>y(}ej8%_i4!cY06Ymv%+j= zVJ0$s)6>FVdQ&MBb@01+EQBLDyZ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/round_call_made_white_18.png b/app/src/main/res/drawable-mdpi/round_call_made_white_18.png new file mode 100644 index 0000000000000000000000000000000000000000..6d3f9c14d1976295f658a1b35532ad419a93b2ee GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@RheL{AsTkP60RiG>gT|NpP$@TP%v z^@OAj27&$m`(Z2^t948|Qf&I&axjw#Yjc>*un z65I}y3;6C*obgFWMA~Uh`6W#w7F~tQfh_Kf3@bUGH|0g{iU3;1;OXk;vd$@?2>=b- BGKByD literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/round_call_made_white_24.png b/app/src/main/res/drawable-mdpi/round_call_made_white_24.png new file mode 100644 index 0000000000000000000000000000000000000000..0d64358416a5319bddc1f0d2096e4499fc35a935 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjF`h1tAr*{o&l(CgI0&#frYJDP zdpMjr?d%u4wbYU^hUxx8w#}zaSoyy9sk1j%pPs$pk;)?NI<44`p_!fO`m!GbtR5{a wIpX}XgPqOI+vXAf#{>67`Ezav|8IH8v?e-kKet5bA)q}Bp00i_>zopr0MG?92mk;8 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/round_call_made_white_48.png b/app/src/main/res/drawable-mdpi/round_call_made_white_48.png new file mode 100644 index 0000000000000000000000000000000000000000..7b9fb86c629c0f5d28296fb5fa0445323bf9bbea GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtjh-%!Ar*{or*9N>WMp8j&*Wj2 zILLFL;@AadWeJB&_JRe>j2!yr2k&}MRcaA%;`q-H!1~L^UwlQ4a>Ak4FY1&NPI3Qq zbND+|u+`c@I^qX=M&*A7-Fm6d*`IRXGbqOAY~&00WOX1Wj(x`IZif0w*#y1y%x9jK zHtgKPXE6Ob<1?USK-{0sja&Ep5EfqWOZ(HT6Yh4OCh9X9XIBaae4Bn|79fcIs4=foTdGv^aVJvq)7_A(bsE^YgwTs=9* zxxk$v(Ro&4+XK$cDM_)Hd(@ehHD4AynIOWzaM9yJaiRO~$3VLnJYD@<);T3K0RZmk BH`o9G literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/round_close_white_24.png b/app/src/main/res/drawable-mdpi/round_close_white_24.png new file mode 100644 index 0000000000000000000000000000000000000000..4d8be7192a2f257408eb7e7e08cfee0c89fe4b7c GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gjjh-%!Ar*{or!=x2Fc5IHb_irK zcerS{$+PXPfaJpDJxUHAzE&|#Vt=s5z2>IaWG0CTjeig4W^I?5=diGFHAjNO(uuZ> z!WAJ)CWk9j&VTtz*(pzNXBW@pZjYFC%7r`Qy5qtl;=b;BR22N0>-5(a_LJ={4U3-C kK6xJ=I3?!3-m*umJKSd-F*R`&20Dhp)78&qol`;+0MM*QQvd(} literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/round_close_white_36.png b/app/src/main/res/drawable-mdpi/round_close_white_36.png new file mode 100644 index 0000000000000000000000000000000000000000..ee337f8a05371186038acb15cc42696090260d1f GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBmUy~2hEy=Vz1GOu5Fpa}@PfzN z3jzxT?=kQevU4h$cs>4eP?`0GOyv%HhWEb?eB5>I^d=o%)2G;Xk|H7ER9{6SVhf#Qzi^EF^*{8=}XxO_s{WP>X)qgQi>)8H4hNX->U7wPf zB3P%0FV@*5A1oYD*VFJRxz3&Ow6yY@D^LC{XtkKv&TJBXMM3_(r;ERF_0f)29m$!;mw+XyuL`kslz&PuBg)oP61Wte-w> zC`buTIq%N$^s}Jj&l;BiJNb#z&%3t(xt2d`j<9`d%njZ(ciSYO(39ykE@5@Y5+`?@ zN}Sfuaq7A9r%yjS_SD!Z>Cf*!aXMeBk@I@_Cs)DeAqVya{qsE{9IW+-Wk-_Uzp^_U oA6QIE=-2#Geyf)s?A}@8{5e-w{(gE~2VbB7)hna zXWlDCWoN1pP_ z1V019z3Y z#rR(frs4?~I6*7lF?!+whnNsMOE3_R|~_fQ_hP|S;L zB5vyijC7}0E4a~}X{}%-j*9G)m~6Swpvc~eMWrA%vP*GU+5b%pi|kk|yC|56QIQ>q zRjptxUKiQtEl+eUJ`~w0>XU@I?#yZhW8HaID>%R(abB6O(;|DnIW4#lzp>ZUU<@g8 zlFU?mt&Hf$tev41{bn0n7bWL-BOY;>wH8lV8>1Ch%`SLVl)z7{#CI&j9exRz6i>4o u#(1#X5`*SBaF8N%tU;`BgCX{t7ws>xi#7Os%B7wF0000yzTSNOy!Zb5Z+!SKU>_~qp@-+`r;85GvAgOLTWDZtego83QRWCw z7S~60S!G&Mj1}FZFHG=9(JM~hQ)CkzMKAb@V_||F94M;dY(}w*MGIXh>YzN$dO|DK zXbYX`cNIJe-aIKBE4qx#fiOWiGJC=+KE;91NwVr&PSZ%}B>AOqGh_XO&`7qxqtKtX zP*WIUJISAf+Klz5!mlK&Bzvkp&veGtXOJ&M&HC-;3SC>j^IV~xP@R#th5DTPur(t; z5jwd-L!p#EK@Ky&Q_r77dqOu;C?wIc3sr>Ybrd=g+B5PUVVEm461G-2q0ho&u25e% zn33Nuu&FO*cSY?*iEKW!wH6pZr}TI*hXrg=mrnMBqb%707*qoM6N<$f(;D% A4gdfE literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/round_language_white_48.png b/app/src/main/res/drawable-mdpi/round_language_white_48.png new file mode 100644 index 0000000000000000000000000000000000000000..8214b2d68921e6cb335fd24b277e817d6c0242df GIT binary patch literal 777 zcmV+k1NQuhP)#d!Wim{ef<^qmC2rBd>*&+Q4KA>UZ*?&}j~1Sk zV~7VFVD>AF&yI}0t41!*j{f+W!pWbNF3Q0!O$o4u7$P zbqvF^7ETLF@O+{rh1>LOIl(NxCCr?RjlT}hx@e5XT}pF4Df6cyykc!kbCmd1=E5s> z5H!1E&$rMQs9a9iO)oYJLDvnMqZlhO(+}bKa^mGM{P4m~mxXS^{6^3WQX3UkL|9BD z(N9cRV-lq^z-mHw9(2D7Vzz_!Afee3p;^}a0tU&l2;e2?b_(Ji2JL-X=OV7DQad(& zsvn1C5_nZV9&*jEswYFt=OoZlU-ohmxXT@cKS8@zes6JCVlpps66l0Ms|DJA&@N=e zUk_tC1=^jUy~#=7%@{?Sh(P8VTZ+e$0_}3pwu2*47|_#W3uxk~V@~jY=qL zpK`t+-k??rwDGVvpAmm8jCn4)z6R}WP6GGob9>e~Xf-4LPR@BKea~>2cM7d9&71@_ z)R)DX9MDrg+B3P}O8sb+N#J{;6|$ds^xiCp+YH*r%>L7R>3%9M6G4_TbXNs2AA#AQXJD3Z)%|xPe>0MPc_C0=Q;un4Ua03_zh_pk`r-8SO%lcVrR}JQ05ZRuo z0Q^=stg*joB{)Zk^V7L8=JzDB`oZL$Iy^E8Q}Cw z{`kZ4D3PA>ba5UU0bd6;aE5z4qaQY-4(`wjm!v6Erc~e`_<3(>W1$yF00000NkvXX Hu0mjfaJF8| literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/round_pageview_white_18.png b/app/src/main/res/drawable-mdpi/round_pageview_white_18.png new file mode 100644 index 0000000000000000000000000000000000000000..dcff9be65b6f070c4f8cdf31abeedb86114de921 GIT binary patch literal 222 zcmV<403rX0P)`STGPPkZMpe)CKRM{NK=+H6hiY+d#|$bwM!@ z>p<0|lV%ViTpXbC3P|jJQVl`?g!h7>>L24Ws2VOz*s%Lx8UgZ=4blKBARSx=r?cS= Y0P(iHO2m`HXaE2J07*qoM6N<$f_X1j$N&HU literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/round_pageview_white_24.png b/app/src/main/res/drawable-mdpi/round_pageview_white_24.png new file mode 100644 index 0000000000000000000000000000000000000000..2f27bd7ca376cd0283335044a885411bd87867ba GIT binary patch literal 248 zcmVD02|HxN7Hh_hg7 zSkMiXlL4`z@l+4Q0#NbUlv*GGm79+yUJpxo6j^{I_ZdyEPf(q^N380>EbpHFENGBukp9Zvn!R ydPpHj*n<01EQ$_ev%sH9mRttK3&WrRqW}QXA9yR_@0D->0000Av{msw%L1w`}x3qcRqLSZa%L;1|#s^0MbQ49f)4X3K~K5hDOkKw#lFm z=>5@$a$7-tIQ-}QUATc+WKg!m+jySbV4%D%8@1Q9(g?k2ta-P)n2A)B0 z!fP6jq%FJ)&!7k4T^U|3ynWB0On7&OHx^#QGpH-P)bL(~mv{z!tDo>Y=*{3rc-P*q zeJb2N=t2Qg$l*j?@5?*r2O6m6Lhg{*CnT#xMf}Sqa1V+4HeJFHPIZ)D(DK1L>LobH zj?&+*&>$6+K^uy7f+i5X+zRSJ^jcO>9d2O^-Yek|YCD0eR;}7Ee4op_sN1eB00000 LNkvXXu0mjfD0Z1u literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/round_pageview_white_48.png b/app/src/main/res/drawable-mdpi/round_pageview_white_48.png new file mode 100644 index 0000000000000000000000000000000000000000..42aeea197d396105fb6681ac5fe7f4b928f3209c GIT binary patch literal 432 zcmV;h0Z;ykP)ds3^P0`Z-YCWL^t1KuRgm_1QzOb7YW#_*CrBB zwHEM(HGbk8J$ekd#zV~kJ6r~?J;lG;0#-Qbg76vJS^~E5&8HEbY6v*b%wOOScGzHs zNoL*G(gBOi>@7wq{^Lhx{ibBVw`A^8MiMbeW^PIb^vT@P+vds4P%Pk`pCG$rrmrU; zW}D2M77IvUpTU2J-_<-qm?m>qUN_<*nYk_*Fwe}+yzDl!epNDHls}-Zu)+bb&V480 zOAROS8pqu`;8UqPkh;gwMNSf53>ejCkFzcU1C}^cvhfA_F3~hi a(=^ZWJ2fX!sAs?c00000)+jEP)>A%x*Dgz#Yq!w`nw z0o=pNw|(zc*bjim{Ox_8_y47}wY5C3jZ?I6hey2N1$}gIgA>%#SAZ=v(KnwddN@Zd ztr}{$z*u!7oMI!b0*+9~Z-|4mOlVrJDSoBgu!&oFU1Dsu-&v0oI`SI+w**?u4v})e zrTp46?$v~-@^Qkk{KnW$QNlNjL{l78+3~OP8RHH+DT*POh=vQ@2VAM3;+l>)P4hql zZz@O?pd}j3^WT)rk4lAObW>*NNwkmaPYQ4(>XaEOL>qB4tu(;i+;>Z4_Ih1efF03Gr2v`Uh%WZZ zZ=#?mGc*#_ml0yYf8epq&_MKU8LxFJ0pCS;WrprWKg(B+>;cY2twmbspYpvadw}lT ztrUl%(K5GnIv1Oy?<5m{`mZ*QkHc zfyUUX`c*W+Zh8lLsu`k=eN06cXAE04LpEog0m$CxJ|jB5kf=*oS>F5KnI&CCv2eYeXnTa6nhqTnU)D> zn8@!H$7vPNKnqjVz2OR5Y1OccHVX55#x)x0E5ISHaE}2-04VT;E}Ga+Yiny+`~%Fe VRGkv5OI!c|002ovPDHLkV1kbs6t@5X literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/round_public_white_18.png b/app/src/main/res/drawable-mdpi/round_public_white_18.png new file mode 100644 index 0000000000000000000000000000000000000000..6b0cd506fcfe3aa65cdbb938a5872231fd6a7837 GIT binary patch literal 307 zcmV-30nGl1P)3~>SQHQhMX*>DP{1Mt5EM`Z!5*N10v1I9IYQ6_r zF;?x4U1d+bqTev4p%14b!5T0BfiDs=Lk!@A5#mbl2%VU8^ZoRKEO z5v06fjUt?V0kmlvt{~+(^MVt4u>kALKuc&7yt%<0fqs?Fbn|#gb)A*2q6T300RsGAcPPG7{YJ}A%p?KH#|7G zySp8rkH|gz?w*$}8#;K#92;cuv&IZhsV%%IK1+&@!I`|Qu%kKCf zyq?W6zz`I}07DQIK@k*15I`^l z!8Zs8p5x}_1=fCC;7I;=-#Pcbqi5j-F3`svrg++}3C8H*{Lmqe(Zxc!IXZ_3)5fFv zX1HuBOkXoL__XgU8mq6rT`K_wbpzd~Z;jUWcg`>s?7UOBwx8R4w{41h3MW`9_Xqu0 zJ|rzL6=sKO;{H(~yv9oCl|x;*(Tsr$K8p!}}9$WKw$LOZ$d>IUlO z4V}M|2OL+_d{u5@`~8C!mO{5A&?~HjLG_ea+s#M(79QhabFr<-li(6#Y?O(*q#a5p z4u&|X*-s_?mBR@p0?ct$KTv*|mWCQZMX(;;|dOMH?f`uoM=!#}HQ$gQRCW761SM07*qoM6N<$g4`z9tN;K2 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/round_search.png b/app/src/main/res/drawable-mdpi/round_search.png new file mode 100644 index 0000000000000000000000000000000000000000..882aced56df0ad99c9fc4113ec9734d8750f61e8 GIT binary patch literal 484 zcmV+Ur1|>J_1xv8W2OJ!GMc&!t{)#k>w=34D_aj38U&Ff)RzXL5lhWZfKQ4j~Io zE^vU%&tYZ*vdG*5S~;GdWV@m*;M-gvfvl3l%m6ZFa)AwGtsG|dA)A|AUX0R332TeA5#ii6Xo~0QwoAzG z`UF3S@z((xj1iVa!a@+UW&fN#-k!Hp*$+u5+fY2N5?Bz^4Rj=na<^M axm>@R(=*bm525q`0000C)u@ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/round_search_white_18.png b/app/src/main/res/drawable-mdpi/round_search_white_18.png new file mode 100644 index 0000000000000000000000000000000000000000..7f630cb6ed125ea53c9e6160302b0eb0d7f37485 GIT binary patch literal 243 zcmVxP1F;CHhG+os`Tr2`9*AE<*^hzPfmlO0fcQF8lQWXI2@qd~ z8mvH!LHSVIEwIQb0P%Mq?kC2e`5>F|$ZrO@m>7fh1MzV@@{57^G%*HE2I9{^EPx{> z?*s9AVhl0>;@?2L8WiwohV(1pu$*CJ001`q8b0C9+4BGZ002ovPDHLkV1mbdX2Ade literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/round_search_white_24.png b/app/src/main/res/drawable-mdpi/round_search_white_24.png new file mode 100644 index 0000000000000000000000000000000000000000..62ff54912b7a6c240106bc355fc2a22350ed09ef GIT binary patch literal 276 zcmV+v0qg#WP)dx1NN-SD-rC4fhBCAhaPs(nMX($SNQb3C-hO)9a7@d&po13XUqts-f@i! zj4+j&V6Bdzq0~LrzJIP9NyEli$r-aHH9$H0IWrM1a|Yc~{lw@=b#lbCg%7M&+}{X; z96@`+sQTW4aFZiwARJfU+Z0|GA*h`@=t#J#zSk8Va|CS*Z`Jn>v%dOhVJhra{Q15J zdqoa77v6vR)y1iFx0EYr6%*kB?HN~fDAg-+!nV{D$LPlGv5r1or5=hpU>~2V84JTY zqBihswki53rOxVzDzSr0jD-)}qmSh{-d(<^4AA;(QBBlf(W1u1yrG2=;G|d-XchlS aqwxi&E5nTKM2krP0000t=`Ln;{G-c;mpG8AbGJly?F z?(JUbH#auRE(XDa2^-X{*{r{%Y%msQX)b#2eBtWod384h}45f=Wld+vih=Wb8?{;a_6 z|L(i5u9eEpX=`F;=aaE0c(5hDhdG@~oz3b%XQNp`(gII=8IRe|OJ@sRoDXuTiY|k1|%Oc%$NbBx;$MRLn;{GUTtJOU?Adpae*=` z>y(}ej8%_i4!cY06Ymv%+j= zVJ0$s)6>FVdQ&MBb@01+EQBLDyZ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/round_call_made_white_24.png b/app/src/main/res/drawable-xhdpi/round_call_made_white_24.png new file mode 100644 index 0000000000000000000000000000000000000000..7b9fb86c629c0f5d28296fb5fa0445323bf9bbea GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtjh-%!Ar*{or*9N>WMp8j&*Wj2 zILLFL;@AadWeJB&_JRe>j2!yr2k&}MRcaA%;`q-H!1~L^UwlQ4a>Ak4FY1&NPI3Qq zbND+|u+`c@I^qX=M&*A7-Fm6d*`IRXGbqOAY~&00WOX1Wj(x`IZif0w*#y1y%x9jK zHtgKPXE6Ob<1?USK-{0sja&Ep5EfqWOZ(HT6Yh4OCh9X9XIBaae4BnV07_xaSW+oe0y84K!!oY^@*4_kn0tWI zGWQuC|6r3iZhpXGALB7>Qb)}XDC}co14;o6b*y3Lc_f`6Q2$~62j4$c693fqbnO4_ z|6@hoQTzM#hoVb=N&nlrOZY$k5pnsCN8M{a3dYwQ5ug7m?$5+m%dEQWgKWF(Lu@|k1|%Oc%$NbBmUy~2hEy=Vz1GOu5Fpa}@PfzN z3jzxT?=kQevU4h$cs>4eP?`0GOyv%HhWEb?eB5>I^d=o%)2G;Xk|H7ER9{6SVhf#Qzi^EF^*{8=}XxO_s{WP>X)qgQi>)8H4hNX->U7wPf zB3P%0FV@*5A1oYD*VFJRxz3&Ow6yY@D^LC{XtkKv&TJBXMM3_(r;ERF_0f)29m$!;mw+XyuL`kslz&PuBg)oP61Wte-w> zC`buTIq%N$^s}Jj&l;BiJNb#z&%3t(xt2d`j<9`d%njZ(ciSYO(39ykE@5@Y5+`?@ zN}Sfuaq7A9r%yjS_SD!Z>Cf*!aXMeBk@I@_Cs)DeAqVya{qsE{9IW+-Wk-_Uzp^_U oA6QIE=-2#Geyf)s?A}@8{5e-w{(gE~2k! zTXWT`N`pDswnq=nc^#wiXW_Y4r;YP=RzHjRbIkYNHkqB@)xOv8ncMHQoII=eoaOU5 z5aIxv1p{-0(EAEzwhxSZLJrDdf$LqeBN)pMi!aKe3nNsk?%J%U6^}cy3>MT zG1G;4`=vcC7~YFEq&?8)@;tE9CzL5pc>>EEZ3F+GFFkY%OO~`*SOq!D$gWiE>$@W0 z?w-}LSlRT*#fi5bzVNW}Gge_e?(x&&r^m626MK|vv>OuV{Fgpvc*&}7;+LNb^0&KL zY~FWQ>fwvqYtghzJ$m7>x8T#nPlZwnD=i#7mTOs9v#LvEu4E_?E?6|tjdj812I1b4 z6%1QAEGByJCrnU|i$r;uuoF`1X!q4|AY|>%+!F zPPW{wNgFK;48qPQEqr&5`*n=}#(9sD=5`%zO?s$fHd!RT=(+#7=O2prx18LwXPt)U zBo!E9sbNyypjYxt^aAtgQ-}2%m4nk0OdlJsZ{*hZe;^$Z!c*{Qul0tR4=c?N%>7=s zs(1g>rH(BxelYkaL~0(8Tj1F8=ZAjnQU>dWG{H}gnb&Bu{$R*EtMugf|F^3c-5%Uj zaH{&_K6^7OLp-n2lH>Bb%z6Z5?sM$?*!$qeNsd1Go(De;avWgzV_B!bWWd0GoZqG3 zPXfzvem6K(1LV0E`~gz^KtTr}52$3q%lNZ@rkfr&cdDyVegdJE9IsEwkGA+HuqXH7 z591x59{q4T(Vq`=9)g(pRD3k>5g{IBL(7sp3DCyzTSNOy!Zb5Z+!SKU>_~qp@-+`r;85GvAgOLTWDZtego83QRWCw z7S~60S!G&Mj1}FZFHG=9(JM~hQ)CkzMKAb@V_||F94M;dY(}w*MGIXh>YzN$dO|DK zXbYX`cNIJe-aIKBE4qx#fiOWiGJC=+KE;91NwVr&PSZ%}B>AOqGh_XO&`7qxqtKtX zP*WIUJISAf+Klz5!mlK&Bzvkp&veGtXOJ&M&HC-;3SC>j^IV~xP@R#th5DTPur(t; z5jwd-L!p#EK@Ky&Q_r77dqOu;C?wIc3sr>Ybrd=g+B5PUVVEm461G-2q0ho&u25e% zn33Nuu&FO*cSY?*iEKW!wH6pZr}TI*hXrg=mrnMBqb%707*qoM6N<$f(;D% A4gdfE literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/round_language_white_24.png b/app/src/main/res/drawable-xhdpi/round_language_white_24.png new file mode 100644 index 0000000000000000000000000000000000000000..8214b2d68921e6cb335fd24b277e817d6c0242df GIT binary patch literal 777 zcmV+k1NQuhP)#d!Wim{ef<^qmC2rBd>*&+Q4KA>UZ*?&}j~1Sk zV~7VFVD>AF&yI}0t41!*j{f+W!pWbNF3Q0!O$o4u7$P zbqvF^7ETLF@O+{rh1>LOIl(NxCCr?RjlT}hx@e5XT}pF4Df6cyykc!kbCmd1=E5s> z5H!1E&$rMQs9a9iO)oYJLDvnMqZlhO(+}bKa^mGM{P4m~mxXS^{6^3WQX3UkL|9BD z(N9cRV-lq^z-mHw9(2D7Vzz_!Afee3p;^}a0tU&l2;e2?b_(Ji2JL-X=OV7DQad(& zsvn1C5_nZV9&*jEswYFt=OoZlU-ohmxXT@cKS8@zes6JCVlpps66l0Ms|DJA&@N=e zUk_tC1=^jUy~#=7%@{?Sh(P8VTZ+e$0_}3pwu2*47|_#W3uxk~V@~jY=qL zpK`t+-k??rwDGVvpAmm8jCn4)z6R}WP6GGob9>e~Xf-4LPR@BKea~>2cM7d9&71@_ z)R)DX9MDrg+B3P}O8sb+N#J{;6|$ds^xiCp+YH*r%>L7R>3%9M6G4_TbXNs2AA#AQXJD3Z)%|xPe>0MPc_C0=Q;un4Ua03_zh_pk`r-8SO%lcVrR}JQ05ZRuo z0Q^=stg*joB{)Zk^V7L8=JzDB`oZL$Iy^E8Q}Cw z{`kZ4D3PA>ba5UU0bd6;aE5z4qaQY-4(`wjm!v6Erc~e`_<3(>W1$yF00000NkvXX Hu0mjfaJF8| literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/round_language_white_36.png b/app/src/main/res/drawable-xhdpi/round_language_white_36.png new file mode 100644 index 0000000000000000000000000000000000000000..7d8cdc159f3721a80da4185c59c5186e18dc11d0 GIT binary patch literal 1122 zcmV-o1fBbdP)Be9EzfNI21)u1cyU$D2k#u9D+ko6h(0eio+oY zf+8r2VDUY8I5j&rZzoOLbUy$)X7guecIMxI8?{=kR;$(i4{Tr;9h{= z2)kIF=YYJy7S1qI-2k7lIWK`(!&ls!zA;X*{1OARjB~Rw!7*AdAuuf*V`BF1aELe0 zH8^i^=jn~G_S}MVfI_|=ZsfbihsIMw6X()Q(8VP3quN-H1bd7g3TZk|8Js0tC$0@0 zEaIbb2aW&WM7eip<4fXN*Tuq9>}&e|>=dovM%z%>0L=%B{hhGu->z$;n-Zj12k5J~ zAvPYg*->sg(8s=Vn-8wt#@(}+Za5Ox3++kpL)cAZl->&a7T$a5i+J>f8}CpkcaCOw zN1Z-;5=K#h#lZCoxK!>QYmd1o-^YRzY5OHI6`Qe*XQa>l$dmP2xzVF+CUK@*PyC0D zqED^}oJ1DuAS{Sax5H@%X9b0@LF^oaO<@I=68c_Ot{p!Q8VkFd>e&t7g%!l-G(HQv zY$U=!*gpwtW|=S33eKi-#|iC!3fpTW!Y5(9gtlE_lc}UiaAAI(<_2dGh50qk4bYDH zx0w^5uK9PIb0EDp{{}f3!q;N8N`N}?BSjq6GXAk36vA4G?XQIGPV;E-G5KH{c9jvJ zp|HOa+aC)%s&X?uVH=6--1e@|Rj`0(C z{u-u}5uo$T04+<;48*}J3ea#~0(6#h@I_nLsLIXUzM>KIqsq8_IopY%x@*Oe?PUf2hKC+`*wOJF*~!kmYI0#WE?fBMH}nFeq{t`B5W~p zR#ZA_y!U#nR|(JpCg$JhvGUP%UK)Gm-&Rh5+UDCmnvEQ|Hov}3tD>XKLB`%?C%@#z zWyZVxA~n&LvxA*rx#A6e&p-A!NIzO+?&vcL2>P*d5^P0++e+wrRk@Y;OHac{-|faU zp{v|kyb{(pR(w#g_~9nrrwfQ>HD_4@1D`77aegMen;Q!|s`zK-m%e1|i#io5M7ApS z*RD{vT}1ku4xETPMKiq&##LmR3{uNp&_Yk#{;aC&FU9pAKHcz9xxdq28-aI$hsaRe z*{r|n8Hk(U5Y2?L-hN>184+Kcv4CR~;;zta%o0}d%byLfizYfiJSRi^I=sO?ZvEL0 zEIsA-VVBa}iho}*Mhh$A*PP%^RJ?9`rqINR={U!gd<700&k6QWczXAE+jx$!g081g z;1o+Q<-7PRv(v>&C|eqTCG<57cOXwws2Y~@&Et;07*qoM6N<$g6S6;_y7O^ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/round_language_white_48.png b/app/src/main/res/drawable-xhdpi/round_language_white_48.png new file mode 100644 index 0000000000000000000000000000000000000000..de3e03b211aa069779adbf202bbeb0b53eee9cf5 GIT binary patch literal 1378 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy!M2l#}z0_p!l92{)Xoe%VeV@Z%- zFawW)dwl)u&8P1lUOl8rDPgk%ISzheT z(eHox`SHg#=ig^H2j_Q3n}IhDSVrh zCVu(;|E2$mzD*PO=4M#*vOGP#ZRSMAg|V@*M;~>jXw5zOtmvoHN3}>T>5hP5m1X8FEb5$gRw=Gc|#%wAh>?tNPwv}rcS`-QIjpD)e|sAB4x^6I?gY`MFZPEx!- z&&GsoShB^a;oqzvnO^zU4J#F0bN{WtL>8>)#|9%BC1S z;^kwlW@ET&8ynj)VcF|%j0_hRiX4yk_TpwZpyM4btiJa`sj~ICWfvNs1l&09>X9jT zgL6*6Ce53n9GdYA^8_Xd#8n1JKU{Hh-lV^5ncfRouTOB2yJXGZRx1;{;Qxb!z^ZFc z3fWd3Z)(Fk5(~G27vxs9Y&mq|BMkidkQ02I;jm%PwWJ z@tSh$)yvJNITF_Fk$tT#z#ez3!AW%8lI8MWC+$)&&)c^3?T;1S8(8<6DjPLk>zkPA z{JeRhq;vX-6I&J-CY8LA2r=)updKRawt~-fcHpYB%*S2)q9fM_T+!TfAUQ8c@p{=(3!t30{=+?0uxO@5sdGaZiKFjnIGGH*rZxv97PZ}FXZ5q3rO%QH)^vY5SJ zPQBKCZUo&@oZy_f%5S=w&9YNZjPkDPg{fX~l`lOjGUxr& z>}w*b)h!0Icgzh4%FZl`49mZ?q|oQ)l91a!!yom{@?yU<+cz`zVBq{$y{GuO%9tm) z#`A{edVS-onzb;i{@1ka>+C0{#oydF$>QjV3#OvgUZ=&Iz8c^C%NNT%M=bi{(`SRropPf6FyT4{!c+}`mqHpF01EZIQF5m-Q&*wdw~=4 y%>))6E1L6aTNrcE?6XUPuRiBGv}@O{U*c|Yej85btrG>7G7O%selF{r5}E*uh3c08 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/round_pageview_white_18.png b/app/src/main/res/drawable-xhdpi/round_pageview_white_18.png new file mode 100644 index 0000000000000000000000000000000000000000..56d83d8dabcc4c26e2f29f7cfc077283ad1da9f3 GIT binary patch literal 365 zcmV-z0h0cSP)Av{msw%L1w`}x3qcRqLSZa%L;1|#s^0MbQ49f)4X3K~K5hDOkKw#lFm z=>5@$a$7-tIQ-}QUATc+WKg!m+jySbV4%D%8@1Q9(g?k2ta-P)n2A)B0 z!fP6jq%FJ)&!7k4T^U|3ynWB0On7&OHx^#QGpH-P)bL(~mv{z!tDo>Y=*{3rc-P*q zeJb2N=t2Qg$l*j?@5?*r2O6m6Lhg{*CnT#xMf}Sqa1V+4HeJFHPIZ)D(DK1L>LobH zj?&+*&>$6+K^uy7f+i5X+zRSJ^jcO>9d2O^-Yek|YCD0eR;}7Ee4op_sN1eB00000 LNkvXXu0mjfD0Z1u literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/round_pageview_white_24.png b/app/src/main/res/drawable-xhdpi/round_pageview_white_24.png new file mode 100644 index 0000000000000000000000000000000000000000..42aeea197d396105fb6681ac5fe7f4b928f3209c GIT binary patch literal 432 zcmV;h0Z;ykP)ds3^P0`Z-YCWL^t1KuRgm_1QzOb7YW#_*CrBB zwHEM(HGbk8J$ekd#zV~kJ6r~?J;lG;0#-Qbg76vJS^~E5&8HEbY6v*b%wOOScGzHs zNoL*G(gBOi>@7wq{^Lhx{ibBVw`A^8MiMbeW^PIb^vT@P+vds4P%Pk`pCG$rrmrU; zW}D2M77IvUpTU2J-_<-qm?m>qUN_<*nYk_*Fwe}+yzDl!epNDHls}-Zu)+bb&V480 zOAROS8pqu`;8UqPkh;gwMNSf53>ejCkFzcU1C}^cvhfA_F3~hi a(=^ZWJ2fX!sAs?c0000}1z2fAI;nXp^KKpAlo(5+LTpBuVe7}O!qjPywv=jdaM2}bDQ zw2^=V%u5f{Nq<2P(gvyB4!0!-nxR=S_YgBLGp>q+78a!j>Lu2X(Yo$ya93)ecE!xL zJf{`&I;93W%D7|7`9;1jGEidXT%J+lC{n9Hxu)rv^$E0)XPnr{$_td(nuqfAYqbX9 zJY(0%nb$5g(ASEYO-#McL!$!vB|k~;RLnib{1tN!D(38#{3H#RiP^`PN*m!YG2;eG z4m3eCF~5lphFAdRxJMg1=_?P<2` zsJPx#07*qoM6N<$f*Sk@ AzyJUM literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/round_pageview_white_48.png b/app/src/main/res/drawable-xhdpi/round_pageview_white_48.png new file mode 100644 index 0000000000000000000000000000000000000000..0c378bf65dcd387f7862f95e6f6f12dfd55c5c68 GIT binary patch literal 807 zcmV+?1K9kDP)SC(Z(*5#v|5WtRstnCG|iu8j3>FLXJgWvm1{vv=s z3wgVPn}}cCcW?V9fK$i3 zp0wi5y&8%yzz4^?v9x07m~|XufMSO8l6EO;Eh7juBQEP2jvc%BmydFlVm5IbVMfZyRz)@5H#wmi0YCHDi4*CBuq zpL6=I^O4jli2yTsnr{Ri%t~Z2-v~UKIFTRojljdXv;X6qz~kvXd2I9r^KY^c5`h3h z%;iJy$I^P6vHR*7&~8A4LpdbCTb^V~UdYmx`#C4FChz2n+#oo@fgBRRn(zn-0rHJd zB|u&g)*o+k0^}QEN`M?91aH_Az&^t2X9UQAkv!SBAnURW&7QG*d0$t;Ft!LVkzoB~ zUMAaj(6k6pk>S8XmiEFiT9QG_a>L>v=w3Mt*4G!d5!~+txOcqxCg+3>tD`q0vc2sI l4*&oF0000000000fIo+#liFW~w)y}7002ovPDHLkV1nHqZn*#e literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/round_public.png b/app/src/main/res/drawable-xhdpi/round_public.png new file mode 100644 index 0000000000000000000000000000000000000000..386ab2169896b47ae5a75aee76a4b219bc31190c GIT binary patch literal 1189 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy!M1o(uw0_p!l889z?<^%MDLrIWd zFawW)dwl)$^~diYUOl~;a0=eNCC`pdUp zf4o1x`TX*3h1VwUErP>OKkAK?W?*0r@pN$vsbGA2<7(1tD-qX=qG@qU9i-isJAPmC z=YM?Z!xO5tjKe8-e6q1=y!I~!cLd#<$qvE@m7w_Oik|CC!+KQ=vY|H-1p zKSj&x$GRi@$r3h!YUW*smpk|`X5OpYn;@`TxF%fOr1|7md zrY&9GoiMwjQM~FChsjc29kwqe0x2?<1q+t^Q_nj~9cM<-vk7zs%`fvQJnKSIxb$jD3PQ&+Ig&y6qup6T}OS>|7w!e&5vA|5MYy zj4K^4!#@cfVU@WVeA1ylR_;;LzZb#gXV}ip+QG2j!q)WiMH5#0!h{5yIbthq{QY=& zq(kxqmiYL;x^iH~ylj@jd8PV}5*8*a?kL{y`!1BR;oKenKgzFkn?j$5%<})Y_t1-< z|DLx@Z}$t@JUzy%tnF6Yymen=p4p3(WES&(d2!NV{h0@nOC7q875Mva=5H3W?bY1Z zxi)j7sGs0e?y6bq?YUUF&bDn@Jb!<~yQe)&XEk-c{n^sY|Mt~}Qy+p2#mqLe#GZM& zJjOC6;iaQMk?9Shzz`I}07DQIK@k*15I`^l z!8Zs8p5x}_1=fCC;7I;=-#Pcbqi5j-F3`svrg++}3C8H*{Lmqe(Zxc!IXZ_3)5fFv zX1HuBOkXoL__XgU8mq6rT`K_wbpzd~Z;jUWcg`>s?7UOBwx8R4w{41h3MW`9_Xqu0 zJ|rzL6=sKO;{H(~yv9oCl|x;*(Tsr$K8p!}}9$WKw$LOZ$d>IUlO z4V}M|2OL+_d{u5@`~8C!mO{5A&?~HjLG_ea+s#M(79QhabFr<-li(6#Y?O(*q#a5p z4u&|X*-s_?mBR@p0?ct$KTv*|mWCQZMX(;;|dOMH?f`uoM=!#}HQ$gQRCW761SM07*qoM6N<$g4`z9tN;K2 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/round_public_white_24.png b/app/src/main/res/drawable-xhdpi/round_public_white_24.png new file mode 100644 index 0000000000000000000000000000000000000000..d3ba554b27b0d801b439a2189984b4981e44028d GIT binary patch literal 635 zcmV->0)+jEP)>A%x*Dgz#Yq!w`nw z0o=pNw|(zc*bjim{Ox_8_y47}wY5C3jZ?I6hey2N1$}gIgA>%#SAZ=v(KnwddN@Zd ztr}{$z*u!7oMI!b0*+9~Z-|4mOlVrJDSoBgu!&oFU1Dsu-&v0oI`SI+w**?u4v})e zrTp46?$v~-@^Qkk{KnW$QNlNjL{l78+3~OP8RHH+DT*POh=vQ@2VAM3;+l>)P4hql zZz@O?pd}j3^WT)rk4lAObW>*NNwkmaPYQ4(>XaEOL>qB4tu(;i+;>Z4_Ih1efF03Gr2v`Uh%WZZ zZ=#?mGc*#_ml0yYf8epq&_MKU8LxFJ0pCS;WrprWKg(B+>;cY2twmbspYpvadw}lT ztrUl%(K5GnIv1Oy?<5m{`mZ*QkHc zfyUUX`c*W+Zh8lLsu`k=eN06cXAE04LpEog0m$CxJ|jB5kf=*oS>F5KnI&CCv2eYeXnTa6nhqTnU)D> zn8@!H$7vPNKnqjVz2OR5Y1OccHVX55#x)x0E5ISHaE}2-04VT;E}Ga+Yiny+`~%Fe VRGkv5OI!c|002ovPDHLkV1kbs6t@5X literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/round_public_white_36.png b/app/src/main/res/drawable-xhdpi/round_public_white_36.png new file mode 100644 index 0000000000000000000000000000000000000000..41899cfffabb4b7d6c84e163d29e1be12c9a0d92 GIT binary patch literal 952 zcmV;p14sOcP)fiei9a7=q!$hoUHoVknBDD2iYhf}jY7A}EHUD2gH| zh9C$IzYmJxwUX=Iy-VE>fW9XGBzNz0E{vppB8|O|e<#L3t{j8?1(iNTgq$H!fu| ziF0Y(Vt79b`%pN`MX~;wFWz-7rw1P!fFdywgwwY(ers#ecZ7LbggU zT=GC2%*34+v3-##StuEf#r+Adfv+l1(FR^7F8}r|`pS0|Du7FIC;1noOj9i#DmLd0J7&Bh^08M{)f;gN;Q*HtqXM6lg=-C@gB;Hyn>t+dymL9*PeXk5r~hd@5i@ z9W%}|*rT|A5=MgmO85p{=Nar~o=H`LNH-xTY>FEcxy|u0L{u3m@dpzElM8|J0d*vFU9iCttnYdoj&sGq3i*}d;zAIn<4QsF(KnvHaVsj~HMd+lrUrAk+!E$fP&LZm1)4@KYKY&at{I&&6M<&H$aT zY_N-wa%31{D=a&#;v0sT$#052zG5Z3MQGzQj?lvpH+TfV7{76e3mjp0kyCb~(P%Up ajsF4VqI=7vBC~w}0000C9!Y35Q=Na8N@yy^{bF$ zox}j0R1?^ichkmYh|N?J*pqkB!~kF9eNHujb9qNi46rZnN2&o#qc3l#i2+uWTdvER zRW$>K>aVQh25gnNPfdjrc?A|L-XdA%Q#NUp)i>L zQmOX88*qljciI|xWpF)ArFO~Re=`akWBH9k;8VkS!hC8oY@#r{ANY(-bTIeZA1W)@ z!U-O|O&@Ei?XZJFGwifA!W#Oj*OyncIl>YiRp$l^=uUEkSsWX$0!Nrmzd-vVluwfG zjb0Bc={G<`n8Ge@y}w>=f(IhPE3D%T&))7Qjg;1*ARIN3KiLl>R= zj5Z=vru`8jLWl?vAw-0T5F$cE2oWJ7bW*4^!gUIjMkp|yLZuOAQm8D#T?&;(*hr%n zu#di1PcaM~GfZP8|A$ZrA%qY@2qAfhBCAhaPs(nMX($SNQb3C-hO)9a7@d&po13XUqts-f@i! zj4+j&V6Bdzq0~LrzJIP9NyEli$r-aHH9$H0IWrM1a|Yc~{lw@=b#lbCg%7M&+}{X; z96@`+sQTW4aFZiwARJfU+Z0|GA*h`@=t#J#zSk8Va|CS*Z`Jn>v%dOhVJhra{Q15J zdqoa77v6vR)y1iFx0EYr6%*kB?HN~fDAg-+!nV{D$LPlGv5r1or5=hpU>~2V84JTY zqBihswki53rOxVzDzSr0jD-)}qmSh{-d(<^4AA;(QBBlf(W1u1yrG2=;G|d-XchlS aqwxi&E5nTKM2krP0000+Ur1|>J_1xv8W2OJ!GMc&!t{)#k>w=34D_aj38U&Ff)RzXL5lhWZfKQ4j~Io zE^vU%&tYZ*vdG*5S~;GdWV@m*;M-gvfvl3l%m6ZFa)AwGtsG|dA)A|AUX0R332TeA5#ii6Xo~0QwoAzG z`UF3S@z((xj1iVa!a@+UW&fN#-k!Hp*$+u5+fY2N5?Bz^4Rj=na<^M axm>@R(=*bm525q`0000C)u@ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/round_search_white_36.png b/app/src/main/res/drawable-xhdpi/round_search_white_36.png new file mode 100644 index 0000000000000000000000000000000000000000..656911d3e60f373aef57da1005a45a21e9d34b3c GIT binary patch literal 676 zcmV;V0$crwP)oCdPSznR-mI)1)}haN%yZ7~u%7 z@d91!;Q+@NW9e>_MqEkQ!bsi?PX6@+VH>Bol{dsz>4Cn;8)D}Hj|dZaM8d)-8}-KJbUb3EJN&z4(hXQfT+RX%Qb>{Drr zVrDeFkv8A-o5VJj()LTA+WR$)KbH2Xlt5!??`j(VSlZ800xceMCc%NUX(@rOrFCjt zYf8B+CD5gW8pnU$$Utbu0LJEh`q>B2xPJa73C~87KY$5U^L+$@~yP2qAY+dh3m z^6A$m=^OMDDl`7;Y9-9~H%ag;xW9G3c@4++t%~et+<#q_6>Ae^VbkW|3A2z`Q)3X} z%qOuXd+m9~=B=ydIvq$T72Tk)M!_J$F=0c~fdtmZgIr9_Q1t>5#7THDHM8kh{QBzg#~aI5yxlc1L6zNm0}J=G1WqxX zgF-qHO|03R+T3f}r#5e0aX0a4LvCVfW9@-c&btqus@CD#@aaO{+nal@U7t2r?Z4mc heP4u4ki*KBp)lp9_3zC|9Kh&c@O1TaS?83{1OR%PxrP7$ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/round_call_made_white_18.png b/app/src/main/res/drawable-xxhdpi/round_call_made_white_18.png new file mode 100644 index 0000000000000000000000000000000000000000..74fb74b2d8ad774b38fc39f689eb6a0c5c20267a GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^W+2SL1|)l2v+e?^8=fwXAr*{ouQ#$D4iIU5sGwmL z!oXqW#P&i%QiY?7p-EwJNkh*EaVA!G?TO_U_WTte9>(QO4f4`lI;D$yMWdKR?7WX@dX& literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/round_call_made_white_24.png b/app/src/main/res/drawable-xxhdpi/round_call_made_white_24.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0618790eca4fc3918c89d6c33b755019dc2ff4 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!?>t=`Ln;{G-c;mpG8AbGJly?F z?(JUbH#auRE(XDa2^-X{*{r{%Y%msQX)b#2eBtWod384h}45f=Wld+vih=Wb8?{;a_6 z|L(i5u9eEpX=`F;=aaE0c(5hDhdG@~oz3b%XQNp`(gII=8IRe|OJ@sRoDXuTiYO)FO}|q0qvo*pkR$z>~<~%r4NzP%g+L{dw>Inr;7g^*ubs zY?B<#2s9D}T%G)Cfz?XA>L2G;`(Hg>xPQgBRh#A3pTGL(8yS zXR5jYG>n^Zt(y&#P=CWUbvedPcZW6d{S8Nqa~0$mH?FMEV=-~IsqSWWvUxoJD5Ihr zqpx6p!?F%{hu|a13p5`IUJ&`nkwfP*fQ#!T(5*|LVF5vBg$m=aoW!KZ@*mnVd_>t+Rcr?-sh>aB069SQ_xQ-yM_|kiZY_&UB?CYxX;R010}! L`njxgN@xNARl(!p literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/round_close_white_18.png b/app/src/main/res/drawable-xxhdpi/round_close_white_18.png new file mode 100644 index 0000000000000000000000000000000000000000..e6360b4df65909b5a53258bc0e3033084b5c073b GIT binary patch literal 292 zcmV+<0o(qGP)=429FJmfJPN?^C;-Q!ARLe4a6F2~@hA$%p@3idd-4BKJdQ`^nu23&qv}DzqYG1to0000k! zTXWT`N`pDswnq=nc^#wiXW_Y4r;YP=RzHjRbIkYNHkqB@)xOv8ncMHQoII=eoaOU5 z5aIxv1p{-0(EAEzwhxSZLJrDdf$LqeBN)pMi!aKe3nNsk?%J%U6^}cy3>MT zG1G;4`=vcC7~YFEq&?8)@;tE9CzL5pc>>EEZ3F+GFFkY%OO~`*SOq!D$gWiE>$@W0 z?w-}LSlRT*#fi5bzVNW}Gge_e?(x&&r^m626MK|vv>OuV{Fgpvc*&}7;+LNb^0&KL zY~FWQ>fwvqYtghzJ$m7>x8T#nPlZwnD=i#7mTOs9v#LvEu4E_?E?6|tjdj812I1b4 z6%1QAEGByJCrnuXB3%a^<}fun&0+3t{KdlbQIq9brlDP_-PEP;)_l46|C!8m>-#plzne~* zHWL#tdM9wtX<**KH!qd4qn4Gh*Yi#Zl=IUs&{U*q(s4N(sc)=X#FQrKtx z`Rmq(x02qjvy;w#yST(WDWE~D(X?z0;~O3bYXxHtJDBw?iunf93+@X+8}xj28P6a1 zAiqUmjr9eyhia6KbTp7o-jF%CM zo+fvyg&lCqJ8*Atgkwh1(uJK<`_;niW&xG0@#nY9NZRViE|J6cMJ-HV7Dy56 z!cGuJWLCt_44^F#D}nX{9U?R><8nhZQ=4RxrMq1)^6m zzL^1}x2HaOs1*}#H!hhO7@>wv8 iC(N(lO-{oE-?+Q>d6eGzE_DqUtqh*7elF{r5}E+&$<0Fm literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/round_close_white_48.png b/app/src/main/res/drawable-xxhdpi/round_close_white_48.png new file mode 100644 index 0000000000000000000000000000000000000000..252457bbd187ebc6438f67754b386d6431f7f887 GIT binary patch literal 689 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q4M;wBd$farfvLjN#WAFU@$D@}7u7(K;}4rR zRB$LBP-H3`#CYf0njDdd72k^6m3|3) zJR&SuJEOuSL_tpQD$qHl5R*gHVO&m-(RV=(6%4EgIn?FKe6ah!0+oP;FLHd;c_!oE z-eIS?@lUbi7ak24Tj(k0qTi?6!+5F4+9@_+{Nisled-+`l~9Wizopr E0POcCZvX%Q literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/round_language.png b/app/src/main/res/drawable-xxhdpi/round_language.png new file mode 100644 index 0000000000000000000000000000000000000000..5b67983636f2f5bfc56b3f1222b89d0f12d03b59 GIT binary patch literal 871 zcmV-t1DO1YP)B!Ky!3M5z=8F8oySwGVRK^@OPEVrkQNTnM-wZ2 zzy@abF;E@H_%8(bgq3{=bcQ2Lnnx`Bk3d=cgS#ZaK4!iuQ~@XG$`Iesl@aE49jb~8 z!-wynvceNAV}PIW@zU^&&akwrP!||r7%zCbsk=wz>eF?8q0-yDc8-&n5ww(as3I;= z39uu>y@sFTk<{o^u)w3u>lwU>>A8GTp^kBa$^t7=+eM`la?Lwb8dCEeeN;x6Ng~(~ zl{pqeYGARiON$hoj$_RTgE_L9*o~1hX%?$NAQm<@-l~Ji1-lLQ4t!GKd_GfCS@1T;iX{d%u z(XoerIt1&Rd%!sVm24Vnp^}NI|AtD_Ay{uMSnLOt>h=xoPcU^M$skJOZ!7lX@o#bWz1Gt{?H$=jahD$jc~LBG26 zu!eibv@moDc8zJF9Q}i zuMS7+18+-o(K(L@SF|`=Y}%|3p&imw3sl}Qo8&K-J}OJB8y2Wj%t&u(FRU;t3vnNn z1s1#{(F0UrfcZ_`BPuP!Be9EzfNI21)u1cyU$D2k#u9D+ko6h(0eio+oY zf+8r2VDUY8I5j&rZzoOLbUy$)X7guecIMxI8?{=kR;$(i4{Tr;9h{= z2)kIF=YYJy7S1qI-2k7lIWK`(!&ls!zA;X*{1OARjB~Rw!7*AdAuuf*V`BF1aELe0 zH8^i^=jn~G_S}MVfI_|=ZsfbihsIMw6X()Q(8VP3quN-H1bd7g3TZk|8Js0tC$0@0 zEaIbb2aW&WM7eip<4fXN*Tuq9>}&e|>=dovM%z%>0L=%B{hhGu->z$;n-Zj12k5J~ zAvPYg*->sg(8s=Vn-8wt#@(}+Za5Ox3++kpL)cAZl->&a7T$a5i+J>f8}CpkcaCOw zN1Z-;5=K#h#lZCoxK!>QYmd1o-^YRzY5OHI6`Qe*XQa>l$dmP2xzVF+CUK@*PyC0D zqED^}oJ1DuAS{Sax5H@%X9b0@LF^oaO<@I=68c_Ot{p!Q8VkFd>e&t7g%!l-G(HQv zY$U=!*gpwtW|=S33eKi-#|iC!3fpTW!Y5(9gtlE_lc}UiaAAI(<_2dGh50qk4bYDH zx0w^5uK9PIb0EDp{{}f3!q;N8N`N}?BSjq6GXAk36vA4G?XQIGPV;E-G5KH{c9jvJ zp|HOa+aC)%s&X?uVH=6--1e@|Rj`0(C z{u-u}5uo$T04+<;48*}J3ea#~0(6#h@I_nLsLIXUzM>KIqsq8_IopY%x@*Oe?PUf2hKC+`*wOJF*~!kmYI0#WE?fBMH}nFeq{t`B5W~p zR#ZA_y!U#nR|(JpCg$JhvGUP%UK)Gm-&Rh5+UDCmnvEQ|Hov}3tD>XKLB`%?C%@#z zWyZVxA~n&LvxA*rx#A6e&p-A!NIzO+?&vcL2>P*d5^P0++e+wrRk@Y;OHac{-|faU zp{v|kyb{(pR(w#g_~9nrrwfQ>HD_4@1D`77aegMen;Q!|s`zK-m%e1|i#io5M7ApS z*RD{vT}1ku4xETPMKiq&##LmR3{uNp&_Yk#{;aC&FU9pAKHcz9xxdq28-aI$hsaRe z*{r|n8Hk(U5Y2?L-hN>184+Kcv4CR~;;zta%o0}d%byLfizYfiJSRi^I=sO?ZvEL0 zEIsA-VVBa}iho}*Mhh$A*PP%^RJ?9`rqINR={U!gd<700&k6QWczXAE+jx$!g081g z;1o+Q<-7PRv(v>&C|eqTCG<57cOXwws2Y~@&Et;07*qoM6N<$g6S6;_y7O^ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/round_language_white_36.png b/app/src/main/res/drawable-xxhdpi/round_language_white_36.png new file mode 100644 index 0000000000000000000000000000000000000000..cc1cc76591d1c2f707749804f86bb7457138c2d7 GIT binary patch literal 1544 zcmdUv`9Bj30LI4<8cDXcQMr%h-dsE0j4heDX0IcZp|u!GF;|F~GNst?qA1rCD)AxL z%Zpq&;*C*`R!Rzy-tA3qUhkjrKA+F``TqR;@?7(9b5c@-D*^xjCFc_a%C4FJArIW` zmX_+BUG;d7sl;9H{Lj;!Zc@5C10PLs^8!H4old6|KN()=d61XrXsjmh@@eN47c1lc z@T+@x+qT%}?bz?-x|-EFpbyiAA?vm(%@@y>PNG=${RLiEVl^@&3=;AI0GTJw1UxlP zYISxxScF!S9d}*tqhaL9<`F^Wx1%XLJJpeVkaBK_>JOA3OYIx`W_Ql9nVcinLJ_wI z-*09(Jf_xHJZM6TXn~>X*x=LFvZJ;0VHgx66ayK3*1FOPdKoT`f@tG{WO@*tW>%qu za@|e?JCQ>2^^KUk1*|J;Hv%_iGf|qVg8fuMHLT@cjLee0=#< z){vD)Rq(<)7!Pbas4a9~Ta^YQVx@)81&!wy=v{`X2aLV3(HOZ}Fkc_gD0nWVdl8Fr z*KBAV0mg;{;>sw0q-;{rfN>+4S$&mT%NNG#2QHP&#Nxq9NPm1tu*bqI6T?C;Syw^DziOpa+%MAP=4(n{OH#yj^Z+U^Ts zsqU`uExt^J3&KibDhR-DW^IkwNXTwJ`GuadqOKCk;jDscR+c+3G%e?>A_iEtD|0O zhb4c%LxAUu!sj!FGx7}@q;sF+Wf4Zu)#eM$93X~dCRr?C$C(O1vSb9d4MJXvV@E)< zhg`U;FTJZZw1nVT!LZPajtziQKJD#^5qb87+?@Tzyt9{cv*GSOPEgC-w*YnWgsDR zFSyR42{U*^6gH#W&*AmPE2?J_<@_D*SygH^dh=8{q+i|$O)BYIsmkh~AeCexyNS@H zFJd=2jJpWgF(K&Hgrek$txXO5>LWpmqQ(?h;1_^o5r(k%$;iu?G9)_ z;pGjre~q7P<1zOhhav1D+U*E88OtX%*9470^pVEXi4~T|?fF9l|0P;4*Yzx@)Yo$e zs{9)BPsWmt_PoJdd{Gqru}u&Kw{EV zf6SbVJ?U_u$4l<(aIIWxG3RZL!KW=rxY0}tJcz!~%F0s#^3Ik}X2iVkEZbo)=K@lye+OZHha67?}}pWl>BYt*EC zt@%fFt2$V?Gq*vo@ix~w-t?4Sy^3LTK%ap}vGZbQ#A*$NYOUg7T zw%Q_!wb@(qv>D2xhH8QJF^fx0=dA~aZt6#hX=%vB z$)6DeMolYM`{;8|2Vb+-;qNp{hw1qT#gOD5l8q1F)pt60nNw2`(C!xkoQZCPdWWF2 Fe*t*$D4dNYy(l+c-H6508MYjfEL5 zhIeyz)tfj7;$I|P*1JHp$VyhzvBV%AhHRf=4@yTwx<&NEQWrdDY3vR^0Qh8C>>twI zKB6`9u2%;*)wLdt@1*>yvbn1jmm2xawknY5cod!A6+aa}gOxSp)_Hgu&|WR>s9pJ;Sfz)QB8?UjrpQlP5Dyr9)s!Y`e3%}p6?7apSGg$p7>WrES$3Ytb1EodgCLubEOB*9+$FGug=#1>2}%sWy{Tp}$$cmV)|$Nkz< z_-csnwVu5Q5IQQYwFCS1qEn?jKc%Lc7 zNz-}xb=Z83M0Bv8S2wgA@W*0Xnx87FT~@fF{vts~Rg3?QT0646f{1cEPkyW#Zb@Z>d-b_$gcrvh6*U9wp7qc0ufQn}v1}+(!?^<`+ zeI9*ZhnAgD$mQTpU98J#G6^Lu-CAJU=lP6Msj=rs1x>ppHG|x`t!pE=%g>>&i;h=u zt4AIOad3n<+VJOBwF*0G+4)p@$~mKdPkU`h9vM5jTU-(<-=+Ol8`qAI64>QAX zZ~Jl$)hxatKz4l2=YcUI{W&g=TJb%ia{_Mi-e(Op?GpcDL$))*EJ}zJO-`lS?r-DX zk5BTmB!IUHx4ONloO0SE-`(><;lmeVdlqdR(9`nWy ztCX~QRbHSsM3!THz6Dogzp)UX?TT53jY2>P|VxRZn1Io4#pAI&uyI1KzHl0cLO+h45Fy%ob? zf|8UwXQsUlW0shD$B2klU4R^Q-wJlky~HZa2$>NLcS_3U>QC)%s*TQI=ba1MWCnE; z57#l0oR(^FNJx4;dd&KmS%fYI<;KJ|G@@AAx2x}B-`K^|=bK|W>g}{6w&MLRJHhXV zpUAd!((mpZD7P1qt`3IxAO4{XPo+1u-2qm~gA1jCRAscgA7|Wid%6P5G00~r@q()b z^dtJDJ-0UcY@#*ZftFT!-*mt7O3C;ol;j-U2SRF0`(1BDHuXr4NWUEulqBOkH`6=S zuhGSmPWIp@HJnJjFz8xiQ2Aaz<=dl^79Wmm|A8Fi6)(~^?EzdfXt>GYwccPXv%MEp z{E&HVv{w2?GkAeFn#RWa1%u{XCuw3VCHLT!6CopgMZ>xL(;)modUk&XA5xh6;PanH zAB+Ip@QJU5^KNYC6G|VmdfS#=_SYf&zR-^@$pVJxH{4F0k{0aSBOHJZGot7}BJUi= s+GX=Y>+66CUY<1-=V_~{r~^~ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/round_pageview_white_18.png b/app/src/main/res/drawable-xxhdpi/round_pageview_white_18.png new file mode 100644 index 0000000000000000000000000000000000000000..6ab4f4bdfaf47ebf3b028f22ff9904bda13d48a7 GIT binary patch literal 506 zcmV0)#NYAwUSj0K*UfhG7W90EZAD4B>D%ghTr< zO#Yr%V*i`>@!@js)z^9Fc^4j!$K&yM9AdZIHSq!NG4Y{C+BjnRJ%Oa3A(!}X83>tQJlFcjv$!UQ)ih2?l}`SuNP=0eyC8z*c8 zdRS@=%fu-AxPjKNTf??&g3ma`E(QngoofqQ2y;|0!4mgbV_O&#VyP+YPMBkgCQ6K? zr=}^ax;MUM`Ol}qclWh~Nk49aw#34kR1qevuUE8XAgnXBVT)7OC)YJCVM}5B3~dR8 z^{M9N5eVyKd*ag`Y6|NMbBxhMfpuZryQZ*IoQGh{ai33Y3in4Ew^YLeb5*f}518N$ zRt%eAbzucYXE^d3=?VkLFg{0|t}uWS6ZtqyTvOMEIF&~O8=PQ_)n9Yhv4?XkvB206 zr!LGMbKIl5VTL$9Yq%aJ#&O+oHcW^cVt_HG?uN;fcno8^<1qJ#ZNfq<&=tNgus`Q> wgHk^FGsm^@L+R7Y@eQL3ckp;T9*@WK4V%gso8$XS8vp}1z2fAI;nXp^KKpAlo(5+LTpBuVe7}O!qjPywv=jdaM2}bDQ zw2^=V%u5f{Nq<2P(gvyB4!0!-nxR=S_YgBLGp>q+78a!j>Lu2X(Yo$ya93)ecE!xL zJf{`&I;93W%D7|7`9;1jGEidXT%J+lC{n9Hxu)rv^$E0)XPnr{$_td(nuqfAYqbX9 zJY(0%nb$5g(ASEYO-#McL!$!vB|k~;RLnib{1tN!D(38#{3H#RiP^`PN*m!YG2;eG z4m3eCF~5lphFAdRxJMg1=_?P<2` zsJPx#07*qoM6N<$f*Sk@ AzyJUM literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/round_pageview_white_36.png b/app/src/main/res/drawable-xxhdpi/round_pageview_white_36.png new file mode 100644 index 0000000000000000000000000000000000000000..669d8f6e18f0b61272b5d0a61fae16080cd51eb0 GIT binary patch literal 893 zcmV-@1A_dCP)-<3@C)j~BIKJ;zWDiMCQB*qK`5pzBy0qPDdzgB^(4K6V-G zTGV#dWw5BPzhJ>4!4mAZlVFix*EqsH_Hl?)oMMn*4{v}SY+$8uN$ow36KuXNv4tly z?lkOTlwkE-W3$2*(Q$%x?;BQ|O7Is(3D%8ISZXT6D-05BHe1ac;VG^XY&yHm1HcOm z6Re#REHw`VZ!k`;Fif!fjj`T50$9f=!R|M}(?yAvU=uUB#fg?+aE{f*iI!k+iD!!wEx}-f z4~r2k!6u#JWzzxlu!jq*)`^y2li@b7)U<>(>|q3e%X-lgY|;pa_#3aWa>v&G8a5|J zlSy4iORx$mL>n(wuteKkpkRrHwFL{7XbTi9(eQkMf+ZTZ6YTLtd-{uWJw^%k_zbay z-o$&>+lz4@7B>J{>4@ttgAGJ&=UoOn61DAh8SJg7?RA&ImT)0zIjMDW=dG^A4W3my zBe&CNF~s^j&d9wGvpU1`W*)GFw>ZK;skp`gHkycth=_=Yh=_=Yh=_=Yh`IU?-&s&= T5s9cR00000NkvXXu0mjf+FF{Z literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/round_pageview_white_48.png b/app/src/main/res/drawable-xxhdpi/round_pageview_white_48.png new file mode 100644 index 0000000000000000000000000000000000000000..0e9a226efd90ee8fee50b67366a4601f626e78ed GIT binary patch literal 1136 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=4hQ&zxB}__LmV7z(VY+UhGR*P zUoeA6{OaTP{~ul)&eQ+1ygL-w?AWVwPD3Tit;uCKbL;MP zjSJ%B?Itnbb-c(`!|Ptvd`vjTU}hGNkTFZZb@31vh0<8ZViuF@!dqr2EI8@p9+1;{ zz{!@^k#){1i`5xAV*OXLEkvL3M;*-GbndeLYy&@?8_iZ9ZoE6OxRSqrZvtP`!NUuK zA2IZE6bGLgw(he=C5AF)+&y|%zM<~(yyhSR3!Jf|EV zO$d^h#F%`+%g)g<=$6B!G@ez5ud2(N?&#`q{9fSOJk8#K?e4*^PIgKKS4~)-Hv2i) zW^-}bF@CjXdCJSed%|60-NI!H(k_T!lTE&mdqK0_{c^H>bGEmg)vUOlz_(WepF$F@IC=dN50=O`&T4st!euDeE+oIFtnUE$UG2c=5PPX_~^U z9=_{Lr_7G9#KCCL>eZhD4gW%s?aK;l$d(-l{C zW5-vEHcnJ14P23~;t?yN*z7pztn@yvleTWn9x7e@n@i5;{oLgwr^Rff#5GmiNQp_b zy@$hjsk2&#z?85Q2dS)T$6HUGJ`^h4brIVaSNdI~@Sx)ax0yzIx7K@z2d-7<==*G> nQ1-K8FWc!&IuP`_{ImUYU-s(cCwAe$JjdYa>gTe~DWM4f&a6{q literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/round_public.png b/app/src/main/res/drawable-xxhdpi/round_public.png new file mode 100644 index 0000000000000000000000000000000000000000..a52fa1ef5621ab0c00dc68f8a96dd3ef5ecd9d75 GIT binary patch literal 1662 zcmdUv`#aMM9LFadYqqp3LN0A+b4yGYBwwt}CdLTKr85jga$7lyGYxGN(#a)_8C#+B zm^{oS^hlZ(B8+l-T&EL77s^rp#d$r?`}6wz^8VrT%jY`T6%T`GLO>u8%$eZivE}Sv z0n2aA*ZI3xTk0UYc;dFa`9G)anki@N3?R*vhjt@+}^XU2em#res&2x@mQqkro z1%%(fWfZ91h4nABR1--DeeX{8U$L|OZb#~+>DagWi?&m@D*0${TB`k^m%J_rq=<2L z0z5CtElK?-3)Y~tiAQ=!y{?I}41^yK907N?53YQu|9sR?9UE@i)15&Mbhq zgNeBNn~jOP4$D<>0WAVgqk)l-=8FSyAB%(|#cYUbTxC`T8@1?vM>JZNZ22)7+aV=! zloZQslYl=?BkBj5x>sNGr`O1Ss7OR zdaBsi0^OVOJ~evmzyTf@0ee5ZvB-9Tbz4c5q70XoPJD{$@4|0sVeO61# zLWg1%pB;V7wZL}7*7uqC1gxscMh zzk4Rij)cUH2K(w1>$U0~;OR#Ixb(yls*JJ%Ry=oHqL)PO<4n|8#KHVc;(6n?E zjI9xdEXS~1+G`CaYow)@PCxobHRfvsHIXrm9D=*g?dy?es_3h?-Oy$}?$Z}J#K2`? z=$>^==Am465Z-xS`Z~9L&kJ15lC0&ROuT%kptD(A_Ai{^QZA&RjZAmI zcVW*f)@_40^0?DILPGqY5{uq=)7-?P`M7e_nrUr&coaM;tjc< z69EE_oU*R%5f#Xr-A(dOkA=9Ar#@qri%z|I*sz+S%gH4gOQ&c#w}g$~-mJ1#4X0AW z0-T1~#j%AgwOo@pE6E_UxG2d)fZ=B11hKOa9Nq3@lRaM6Kl6;Fi4O^_mjR@HZ?r?H zXI8#59lGzO`D8Z$2_3I5tyVptc^aB{&8}XpwcC4;5tWU*@FM>Ozqo|0W}!jXP_=DP zV<43@>aKKpDR%;6hl3LqEni)L_AnTKFC|ZWE#m@YVb@eLu~O>WS+amgOSCeazjt61 z3M5}PpGn9!$+v}8BmxFL%S)C6316JN#%Ml$qpul6xxuPg?5WtGoOSKqt`+5fE|=R` zvZMTmW|O{(_0c`qH&<_b-?)*w(KH~q-*lpdwFVvgPd`$ KP7fV|82acF(_xzI?#zYQJ}Nbv5tW<#z4bcDv2s0TncN%E%#oNkh_TVT271wZ;Gqq|R|r z6`x2_gfWWeFsOh4)(zpGVo(YLxGcg4ZjLo7iy4kpfQ;)=B`jgx7p4dPJ?Cmv84+AG z*xg4B;hr;S&U%!O6=RkC2fU37^91O#m~@yEP|h8*c3?%3?4OI$cA40WmlMfTgH`){-73T)pu&QS`tPWWt&J9dpRo-yeE#w=8f&OCgZ*_!Mc{(>5HbP$VL8akngcugerP%F1jFtj zYbF~e$0cup4sK%%yMwHyIq(UxwDCAuJ>hSxqB*bzneUOqapM@nijX~MKT?xbJ#siM zh%xLLvW)g)X<64J{Wzz?`r_D)r%ismMxjRz#|1GiU*vs^;tYF(%vX+EIviHfpAq$M ztNO}g1Bb(gd(PPEao_UV2ia2%+kG7+`}8y^&OU=9e5w_qhpfEFRGh8VPt-YNb z2AT%1YyL6+Fl7SQjS`jMVcpd2Lr?z>fiei9a7=q!$hoUHoVknBDD2iYhf}jY7A}EHUD2gH| zh9C$IzYmJxwUX=Iy-VE>fW9XGBzNz0E{vppB8|O|e<#L3t{j8?1(iNTgq$H!fu| ziF0Y(Vt79b`%pN`MX~;wFWz-7rw1P!fFdywgwwY(ers#ecZ7LbggU zT=GC2%*34+v3-##StuEf#r+Adfv+l1(FR^7F8}r|`pS0|Du7FIC;1noOj9i#DmLd0J7&Bh^08M{)f;gN;Q*HtqXM6lg=-C@gB;Hyn>t+dymL9*PeXk5r~hd@5i@ z9W%}|*rT|A5=MgmO85p{=Nar~o=H`LNH-xTY>FEcxy|u0L{u3m@dpzElM8|J0d*vFU9iCttnYdoj&sGq3i*}d;zAIn<4QsF(KnvHaVsj~HMd+lrUrAk+!E$fP&LZm1)4@KYKY&at{I&&6M<&H$aT zY_N-wa%31{D=a&#;v0sT$#052zG5Z3MQGzQj?lvpH+TfV7{76e3mjp0kyCb~(P%Up ajsF4VqI=7vBC~w}0000FbZ*KfHQ!wX=>0$Lz=dZ}&T}2t+Uc{Cd7WPx|iP-_P$?k+FDwUE_Uw z{^sIv@9ieZHVWN~FK3@_4!%}pww!^1`H`oKV@L(#+nd*$7I}%ZK2+_xnR!t)DdXrI z>*sdoD*rFH+GsFUB=kf~@BP%}^Uvr>hlhvn-#lgNxf?fQ_62B6J2mx8|7@)~UiH}3 z!IuhV%L!e}D&NIZc>DElj~-)*z7;0tw%V#Jy1SswQ)+s)--^tvhep>Xuvr-&F@JyY z%!ypZWk)9+3(Gz-Nz%B@SL)dw>tn{d+BN?--ZHZZ`<#%nZIRt>%cm2QxY(|FOI5J= z6=^p|WxERdGkl1#zh%xpYmc~8<C_1!tLD{5xfvU1)lONpsY^ zz-46*KHhA6Q+mdM-K+L)x4+_HS#GX4KZ{67c`Q7AhU5OWu_h^>dI2|`{l{>epZ^dI-tA7g$ zUTeOu*}98gcCBG++MnltHF#}hpKiYY(&*B&qfN`Ixp+@}I2F)wFlhnTP2<+Jvt7=- z4%!iT)-rVm=aCOi57|@9S{Wax3G7}xp>a*w4%K&0H=1*ao{-b1d9bC;V&1pquG^MA z05NBYculyfdBWM^(T;@yEj^4Lrbj+HE?m&#Y1-;p*7y0D$g2sunjyVeclNlwiHtK9 zUXvIWZTYHrTJYVEz7p5su7)RzZJK8zka_K0p&8Y&9o#1)|vLpKCtXelc^56d-;Gt&6VP_$+ldkU#l`X zH_uutGyl@7cFFj&S=(L}y|xm3ohiPlFH*;Sq3~84>E#L=dy_T?USWFM#`yhGMC7i1 z72c!kB##Cqa~*#1vin`?Mmc8YmX&#j%Fix~O8k_0a&pb##$#OnRL?CJTPpJJY3|k6 za>d6erKaV;;9X<@6Qi9tXp2ykyN@f_*21&-O?8i6!m%3wp}y${nK{YvX4wsIqyVk zk8Zzebm7v&du6i5W$d>9rd2<7*Y|sKuzA_fN$hIVDs!GX-(GZ@S^2hMk8Zm7pZwC# zmd2fHuNfHK|8(Q<=CU_SS)J?J)urCeFP=N&^}#v5k+$D|xGudYo%FIiGv{aDj5V6P zPwfQa>s^_Ds_8vSop$BQi^oZRsm{Eo8{1Vv-b?iuto-3|##i;c!Qz*Hc{peDwQ%nkjiNp-r-e6xB?p72tDnm{r-UW| D?NHvm literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/round_search.png b/app/src/main/res/drawable-xxhdpi/round_search.png new file mode 100644 index 0000000000000000000000000000000000000000..d9e35feee32af251ad46190a3e3f0c38153ab66d GIT binary patch literal 1224 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=4g~mwxB}__Lm4nHe&z%8gF{J> zUoZoQMe+LmtLHa+iwO9)AO8OTu}=N<C>0n1iyE_ z&7yJMeQ~_O?(+NHCi%0&s~7w~vxtF#x!lvmF{Fa=?aixAugw@-FA6{V(PFty{fx<+ zL;veTcTSbrru&pH!^1pW9gBySleJvs~xifm2rt#A9chYyDyQ>%>_lu-?)5dE>k< zzb<4MEOB3a@VG@SOEpif+Lxu=zDhQ!7P`HgAJ)~Iy;pn8Jul(>!lRd-O$^OryIFNp z^FxPeGuvN5ephn~MVZG7kFuS*y3Iy_`*F|RY3yy8E53Pb4;6d9c79t)^_5zu%ggq5$;>r{uDV{+op`l;Ywx_CRPxec;Wpn$(GP(p%~qVJq;>>O*)(mP?3Yc) zdb4a#nN^hqST@i8+8%Xo(JtSU401MsNvR9m4*#FI;a<=uE>kg)H%c})13$5;c1=-v z5ZE)xE<_@DgKUM!vXnJ{q)s2+%+#tG5)s&OU^8Ee@)9OFF&*5?TKo2OP>13U-B#P08Nm^XJ0w`y?apZI(d28A|JyJ2 zB!g$w;r0#37Nq}}a8+Up_pfaN!7^W1COgH42&P z{!1Rb%CxWfnTE;rfCTS{syDcwbBFv;y%3S_?8&M1$IFvh&NXztlS78f!B^}OtZPen zmI^Z->)h|yt5o~`n@(!3#wQ0))t1>y!>70`Jaywa&wDGkn+&U3!lvx~6}_g@ajs5k z*{Sn=PZ_xO23*^-az$3KSgV)xY@^?z*VjmwWLgEhnw!_J7&E1EVKhtD)l(&_Z5}r{ z&dmF1DstPTQsLrp$)jTYJg)=t(myv`J@J4=J@IqH-WIm?Hc5MXWOr;)uAJ>2x8SI< z|H>!x%FdS_xVe1Qd)s-}BAuJRPC0mHVN`SDjaS`u-{dx4iZDRhk-(MVT zX1=m=dq(W0O6ApC*ch_(4lO%0d(W1S=2`kt<@YPDnswI))(c+yY@>fF{iFRW9ieZ* zv(tN|5lt_LSr3{;dp}(4n$sV4<=AnpEGGHYD_Z+Que^EeeBz`0HDSAsgVLU1 pWNkl3}FZ%gu@Vq5Dr5K!{KmP zU%>OXYt~-x-PZf^0qmXM%I%!z`m0}U#)IMYvny(Q;ZDe9t0NIh|YdkY2dD7}8v0Ry00000NkvXXu0mjf--P(_ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/round_search_white_24.png b/app/src/main/res/drawable-xxhdpi/round_search_white_24.png new file mode 100644 index 0000000000000000000000000000000000000000..656911d3e60f373aef57da1005a45a21e9d34b3c GIT binary patch literal 676 zcmV;V0$crwP)oCdPSznR-mI)1)}haN%yZ7~u%7 z@d91!;Q+@NW9e>_MqEkQ!bsi?PX6@+VH>Bol{dsz>4Cn;8)D}Hj|dZaM8d)-8}-KJbUb3EJN&z4(hXQfT+RX%Qb>{Drr zVrDeFkv8A-o5VJj()LTA+WR$)KbH2Xlt5!??`j(VSlZ800xceMCc%NUX(@rOrFCjt zYf8B+CD5gW8pnU$$Utbu0LJEh`q>B2xPJa73C~87KY$5U^L+$@~yP2qAA#V`!RP&_;gLopP^P!z>b1Vb?lMKKgZ5EMaC z1VIq|9z3k?+0IR}HYfLfKMDZ-=iYn1bM8$cgb+dqA%qY@2qAn@Q1QYu%GS{H}3{E>3WYZ|GxW ze#a4ub&SmB7AM%oYRW(dA8=)MADX_v=$T#*+gO?NhjMB*Z&MTDi|O3pbv{&e=-`{_ zOt6uf1n*7f9IbRu@CFmr^%}D)f{y7NJj4nOTewx-`_u&Js_xAKX2F4KCg{Y~wcr&Q zIvA7Qbx`mIbzYrjGTh4BOoc*U-n%*-q2%1A zg5hIh&dabX?;;fpujQSmI>0M=XXT%YXZ>hWu%lEkJd=0bq+st;!SE!4EmyF11iR}b z6%1Pu?5^_~taL9^9biY^RVoH;6+jj);ugJXGvrXFDK7dSAF<$X$ZgPy!0)|T)+l+9E(*oS3VZJ~pSyg{lX zJi zO&8l(opHW8z|dXs5nm2kxH7vjx_E;vtYht`=TaM+*ufzN=69Hy43F{M^18)(6R)(d zme)-aqpjexvRq>e7ZL3j@D?MBcmC7!u;sTRS{q+1#trt;e?Uabz$;vP7-Jm%YAZ}- z5p4zAxNtv)ILMt2U=q=$glG7Kp81S%HqG#jorpI7{I-iDd_x~&|2M!TKI0uWu#z%r z5-miuh!!GRh-ei>v=GrkM2l!4qJ@YS(FRycVX2}Wr?6DfhAAvvv?nPnO|)?eOBJn~ z!qP+=#_g~`*g(%+mxa$^0Z;KfuBw09g98!(0000%|6lhb)I9(I00000AQrO>fXD?u QwEzGB07*qoM6N<$fO)FO}|q0qvo*pkR$z>~<~%r4NzP%g+L{dw>Inr;7g^*ubs zY?B<#2s9D}T%G)Cfz?XA>L2G;`(Hg>xPQgBRh#A3pTGL(8yS zXR5jYG>n^Zt(y&#P=CWUbvedPcZW6d{S8Nqa~0$mH?FMEV=-~IsqSWWvUxoJD5Ihr zqpx6p!?F%{hu|a13p5`IUJ&`nkwfP*fQ#!T(5*|LVF5vBg$m=aoW!KZ@*mnVd_>t+Rcr?-sh>aB069SQ_xQ-yM_|kiZY_&UB?CYxX;R010}! L`njxgN@xNARl(!p literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/round_call_made_white_18.png b/app/src/main/res/drawable-xxxhdpi/round_call_made_white_18.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0618790eca4fc3918c89d6c33b755019dc2ff4 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!?>t=`Ln;{G-c;mpG8AbGJly?F z?(JUbH#auRE(XDa2^-X{*{r{%Y%msQX)b#2eBtWod384h}45f=Wld+vih=Wb8?{;a_6 z|L(i5u9eEpX=`F;=aaE0c(5hDhdG@~oz3b%XQNp`(gII=8IRe|OJ@sRoDXuTiYV07_xaSW+oe0y84K!!oY^@*4_kn0tWI zGWQuC|6r3iZhpXGALB7>Qb)}XDC}co14;o6b*y3Lc_f`6Q2$~62j4$c693fqbnO4_ z|6@hoQTzM#hoVb=N&nlrOZY$k5pnsCN8M{a3dYwQ5ug7m?$5+m%dEQWgKWF(Lu@6i+S`MpF!LM-j<>}A=`9Bw5yz$=g6syk) z&$_?A-2WkAS{1uCf5t-d?cXLmOWwP+m)-PIwDtD|dS9;DtSSD*@Oo|TOXg``7_EOX zynV^c=l+91R_`J6lDnTyISU^6%3JO5g}rM3%fHLM&%T$B#K`<>&bQ@XHha{5nT)?h z3%;Iiyrw_kocYXonSX!UTP*(i{QrX~*W~{<-{f2yzw5L7vORUN@_$bsZMm)=d;e#< z=ra2^)1rUZY!=&MzjgoLxB2zIZ{Pp-Z99T_`L}v?+5UGA|30?d9nb%v?(V_grHt>d zv+jx4uGla4@b4^}jlY*Zm)sp+^>c4Rz3!st>h;F^=XYd&+OccLj%tb3$Z^B<&UkiQ W<+eN9{%Hdf0)wZkpUXO@geCxaV3cqG literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/round_close_white_18.png b/app/src/main/res/drawable-xxxhdpi/round_close_white_18.png new file mode 100644 index 0000000000000000000000000000000000000000..ad4be89fa3ef5f751009108e398a3a443d081534 GIT binary patch literal 379 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2V07|yaSW+oe0yCm$GK3X^&>k! zTXWT`N`pDswnq=nc^#wiXW_Y4r;YP=RzHjRbIkYNHkqB@)xOv8ncMHQoII=eoaOU5 z5aIxv1p{-0(EAEzwhxSZLJrDdf$LqeBN)pMi!aKe3nNsk?%J%U6^}cy3>MT zG1G;4`=vcC7~YFEq&?8)@;tE9CzL5pc>>EEZ3F+GFFkY%OO~`*SOq!D$gWiE>$@W0 z?w-}LSlRT*#fi5bzVNW}Gge_e?(x&&r^m626MK|vv>OuV{Fgpvc*&}7;+LNb^0&KL zY~FWQ>fwvqYtghzJ$m7>x8T#nPlZwnD=i#7mTOs9v#LvEu4E_?E?6|tjdj812I1b4 z6%1QAEGByJCrnU|i$r;uuoF`1X!q4|AY|>%+!F zPPW{wNgFK;48qPQEqr&5`*n=}#(9sD=5`%zO?s$fHd!RT=(+#7=O2prx18LwXPt)U zBo!E9sbNyypjYxt^aAtgQ-}2%m4nk0OdlJsZ{*hZe;^$Z!c*{Qul0tR4=c?N%>7=s zs(1g>rH(BxelYkaL~0(8Tj1F8=ZAjnQU>dWG{H}gnb&Bu{$R*EtMugf|F^3c-5%Uj zaH{&_K6^7OLp-n2lH>Bb%z6Z5?sM$?*!$qeNsd1Go(De;avWgzV_B!bWWd0GoZqG3 zPXfzvem6K(1LV0E`~gz^KtTr}52$3q%lNZ@rkfr&cdDyVegdJE9IsEwkGA+HuqXH7 z591x59{q4T(Vq`=9)g(pRD3k>5g{IBL(7sp3DCH3`#CYf0njDdd72k^6m3|3) zJR&SuJEOuSL_tpQD$qHl5R*gHVO&m-(RV=(6%4EgIn?FKe6ah!0+oP;FLHd;c_!oE z-eIS?@lUbi7ak24Tj(k0qTi?6!+5F4+9@_+{Nisled-+`l~9Wizopr E0POcCZvX%Q literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/round_close_white_48.png b/app/src/main/res/drawable-xxxhdpi/round_close_white_48.png new file mode 100644 index 0000000000000000000000000000000000000000..3c2bdf12676ddbc6b4eb70afde2c530245b9f70e GIT binary patch literal 872 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE4M+yv$zf+;VAl6^aSW+oe0!HMMJAJ>?Vj3ql`_D0uC(HXmS={U^%)_LyT2~Rm72z(IJ54{Xqu3lH$2v z*4N6hF}(Ty?#w$L<8K^5!|?%!uS=}f>P>rGS{jsltlY6Q;BVO9$ho2GSKVJ7f2`l} z>yBGx+h4!B`Jg_s?cdV>Wzm0iTiC-9IN8AN;k-U)ROp?2qV}p05G2+h=GqJ&wN<=AJAYlD}$M&w(G}w(_qRRK=U7 zvmD$1BYRDARy3Gt0TP8UD@?CBmPSEDC4r(Lcm1RrKgNg8-e~uq<*aDqNBw^iuNU14 zkzd|@;KzSSo1RxIe%bi49Q(h}N~Yt$55dNd%1n>lS&sE{^vDZJ*ee;-xg`8SlCWNF zcIk}+L5w~iqZxmpuP*6Dvf_QSQ| zV>iQNamHi%Og-@|68kv}>I4)1C>;PxG|c}$H)j5KQ>LE(8?0`f<}moT@y2Z+xwjXW zmj7=Mx^bz&urEM1ho zEA)DSjJW>NfLstm@7OPv4gY?)Dm0u7Nk3*^%d#A()*mD@uP1aTXIbi>%WfNFUoWy+ zm)8q4K5y0W^e!Oqp)NkGMKgGr(y=nEkZ(FNgDz5##+U)A=SKD^i7Tx`y zTrX_1_S~wsMKNLes}>(D542t7w|e{4ZB_eQ3T^NuTaethBe9EzfNI21)u1cyU$D2k#u9D+ko6h(0eio+oY zf+8r2VDUY8I5j&rZzoOLbUy$)X7guecIMxI8?{=kR;$(i4{Tr;9h{= z2)kIF=YYJy7S1qI-2k7lIWK`(!&ls!zA;X*{1OARjB~Rw!7*AdAuuf*V`BF1aELe0 zH8^i^=jn~G_S}MVfI_|=ZsfbihsIMw6X()Q(8VP3quN-H1bd7g3TZk|8Js0tC$0@0 zEaIbb2aW&WM7eip<4fXN*Tuq9>}&e|>=dovM%z%>0L=%B{hhGu->z$;n-Zj12k5J~ zAvPYg*->sg(8s=Vn-8wt#@(}+Za5Ox3++kpL)cAZl->&a7T$a5i+J>f8}CpkcaCOw zN1Z-;5=K#h#lZCoxK!>QYmd1o-^YRzY5OHI6`Qe*XQa>l$dmP2xzVF+CUK@*PyC0D zqED^}oJ1DuAS{Sax5H@%X9b0@LF^oaO<@I=68c_Ot{p!Q8VkFd>e&t7g%!l-G(HQv zY$U=!*gpwtW|=S33eKi-#|iC!3fpTW!Y5(9gtlE_lc}UiaAAI(<_2dGh50qk4bYDH zx0w^5uK9PIb0EDp{{}f3!q;N8N`N}?BSjq6GXAk36vA4G?XQIGPV;E-G5KH{c9jvJ zp|HOa+aC)%s&X?uVH=6--1e@|Rj`0(C z{u-u}5uo$T04+<;48*}J3ea#~0(6#h@I_nLsLIXUzM>KIqsq8_IopY%x@*Oe?PUf2hKC+`*wOJF*~!kmYI0#WE?fBMH}nFeq{t`B5W~p zR#ZA_y!U#nR|(JpCg$JhvGUP%UK)Gm-&Rh5+UDCmnvEQ|Hov}3tD>XKLB`%?C%@#z zWyZVxA~n&LvxA*rx#A6e&p-A!NIzO+?&vcL2>P*d5^P0++e+wrRk@Y;OHac{-|faU zp{v|kyb{(pR(w#g_~9nrrwfQ>HD_4@1D`77aegMen;Q!|s`zK-m%e1|i#io5M7ApS z*RD{vT}1ku4xETPMKiq&##LmR3{uNp&_Yk#{;aC&FU9pAKHcz9xxdq28-aI$hsaRe z*{r|n8Hk(U5Y2?L-hN>184+Kcv4CR~;;zta%o0}d%byLfizYfiJSRi^I=sO?ZvEL0 zEIsA-VVBa}iho}*Mhh$A*PP%^RJ?9`rqINR={U!gd<700&k6QWczXAE+jx$!g081g z;1o+Q<-7PRv(v>&C|eqTCG<57cOXwws2Y~@&Et;07*qoM6N<$g6S6;_y7O^ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/round_language_white_24.png b/app/src/main/res/drawable-xxxhdpi/round_language_white_24.png new file mode 100644 index 0000000000000000000000000000000000000000..de3e03b211aa069779adbf202bbeb0b53eee9cf5 GIT binary patch literal 1378 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy!M2l#}z0_p!l92{)Xoe%VeV@Z%- zFawW)dwl)u&8P1lUOl8rDPgk%ISzheT z(eHox`SHg#=ig^H2j_Q3n}IhDSVrh zCVu(;|E2$mzD*PO=4M#*vOGP#ZRSMAg|V@*M;~>jXw5zOtmvoHN3}>T>5hP5m1X8FEb5$gRw=Gc|#%wAh>?tNPwv}rcS`-QIjpD)e|sAB4x^6I?gY`MFZPEx!- z&&GsoShB^a;oqzvnO^zU4J#F0bN{WtL>8>)#|9%BC1S z;^kwlW@ET&8ynj)VcF|%j0_hRiX4yk_TpwZpyM4btiJa`sj~ICWfvNs1l&09>X9jT zgL6*6Ce53n9GdYA^8_Xd#8n1JKU{Hh-lV^5ncfRouTOB2yJXGZRx1;{;Qxb!z^ZFc z3fWd3Z)(Fk5(~G27vxs9Y&mq|BMkidkQ02I;jm%PwWJ z@tSh$)yvJNITF_Fk$tT#z#ez3!AW%8lI8MWC+$)&&)c^3?T;1S8(8<6DjPLk>zkPA z{JeRhq;vX-6I&J-CY8LA2r=)updKRawt~-fcHpYB%*S2)q9fM_T+!TfAUQ8c@p{=(3!t30{=+?0uxO@5sdGaZiKFjnIGGH*rZxv97PZ}FXZ5q3rO%QH)^vY5SJ zPQBKCZUo&@oZy_f%5S=w&9YNZjPkDPg{fX~l`lOjGUxr& z>}w*b)h!0Icgzh4%FZl`49mZ?q|oQ)l91a!!yom{@?yU<+cz`zVBq{$y{GuO%9tm) z#`A{edVS-onzb;i{@1ka>+C0{#oydF$>QjV3#OvgUZ=&Iz8c^C%NNT%M=bi{(`SRropPf6FyT4{!c+}`mqHpF01EZIQF5m-Q&*wdw~=4 y%>))6E1L6aTNrcE?6XUPuRiBGv}@O{U*c|Yej85btrG>7G7O%selF{r5}E*uh3c08 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/round_language_white_36.png b/app/src/main/res/drawable-xxxhdpi/round_language_white_36.png new file mode 100644 index 0000000000000000000000000000000000000000..c662d080e1afee50026bd2585fc8513d6c68acea GIT binary patch literal 1952 zcmdUw_dgp51IB4kHH(PVqCy%iUZO^;VnmFikwlEDb)r_hsI6Sv3yEE4wf1bOS(?*o zRK*HWyFr7)Q8gO8G{!5A^WJ~)em|e*`TqR;^rWCsR-!`kLOeV?qBhnR*fan3zX$@( zdMsZu^-MizI~?-Nr~l`4C2E$P%`l6=q8xZ+wQcc_izuHKI@`-K{Y*vd`%ky|fUgg} ztA_V*H4;8ws!6*TEf}}#xjH(1!{LV^^xpGXWyEbll5>4dNYy(l+c-H6508MYjfEL5 zhIeyz)tfj7;$I|P*1JHp$VyhzvBV%AhHRf=4@yTwx<&NEQWrdDY3vR^0Qh8C>>twI zKB6`9u2%;*)wLdt@1*>yvbn1jmm2xawknY5cod!A6+aa}gOxSp)_Hgu&|WR>s9pJ;Sfz)QB8?UjrpQlP5Dyr9)s!Y`e3%}p6?7apSGg$p7>WrES$3Ytb1EodgCLubEOB*9+$FGug=#1>2}%sWy{Tp}$$cmV)|$Nkz< z_-csnwVu5Q5IQQYwFCS1qEn?jKc%Lc7 zNz-}xb=Z83M0Bv8S2wgA@W*0Xnx87FT~@fF{vts~Rg3?QT0646f{1cEPkyW#Zb@Z>d-b_$gcrvh6*U9wp7qc0ufQn}v1}+(!?^<`+ zeI9*ZhnAgD$mQTpU98J#G6^Lu-CAJU=lP6Msj=rs1x>ppHG|x`t!pE=%g>>&i;h=u zt4AIOad3n<+VJOBwF*0G+4)p@$~mKdPkU`h9vM5jTU-(<-=+Ol8`qAI64>QAX zZ~Jl$)hxatKz4l2=YcUI{W&g=TJb%ia{_Mi-e(Op?GpcDL$))*EJ}zJO-`lS?r-DX zk5BTmB!IUHx4ONloO0SE-`(><;lmeVdlqdR(9`nWy ztCX~QRbHSsM3!THz6Dogzp)UX?TT53jY2>P|VxRZn1Io4#pAI&uyI1KzHl0cLO+h45Fy%ob? zf|8UwXQsUlW0shD$B2klU4R^Q-wJlky~HZa2$>NLcS_3U>QC)%s*TQI=ba1MWCnE; z57#l0oR(^FNJx4;dd&KmS%fYI<;KJ|G@@AAx2x}B-`K^|=bK|W>g}{6w&MLRJHhXV zpUAd!((mpZD7P1qt`3IxAO4{XPo+1u-2qm~gA1jCRAscgA7|Wid%6P5G00~r@q()b z^dtJDJ-0UcY@#*ZftFT!-*mt7O3C;ol;j-U2SRF0`(1BDHuXr4NWUEulqBOkH`6=S zuhGSmPWIp@HJnJjFz8xiQ2Aaz<=dl^79Wmm|A8Fi6)(~^?EzdfXt>GYwccPXv%MEp z{E&HVv{w2?GkAeFn#RWa1%u{XCuw3VCHLT!6CopgMZ>xL(;)modUk&XA5xh6;PanH zAB+Ip@QJU5^KNYC6G|VmdfS#=_SYf&zR-^@$pVJxH{4F0k{0aSBOHJZGot7}BJUi= s+GX=Y>+66CUY<1-=V_~{r~^~ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/round_language_white_48.png b/app/src/main/res/drawable-xxxhdpi/round_language_white_48.png new file mode 100644 index 0000000000000000000000000000000000000000..b9992e6e227749254de950db6896aaa17a930166 GIT binary patch literal 2491 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 AzyJUM literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/round_pageview_white_24.png b/app/src/main/res/drawable-xxxhdpi/round_pageview_white_24.png new file mode 100644 index 0000000000000000000000000000000000000000..0c378bf65dcd387f7862f95e6f6f12dfd55c5c68 GIT binary patch literal 807 zcmV+?1K9kDP)SC(Z(*5#v|5WtRstnCG|iu8j3>FLXJgWvm1{vv=s z3wgVPn}}cCcW?V9fK$i3 zp0wi5y&8%yzz4^?v9x07m~|XufMSO8l6EO;Eh7juBQEP2jvc%BmydFlVm5IbVMfZyRz)@5H#wmi0YCHDi4*CBuq zpL6=I^O4jli2yTsnr{Ri%t~Z2-v~UKIFTRojljdXv;X6qz~kvXd2I9r^KY^c5`h3h z%;iJy$I^P6vHR*7&~8A4LpdbCTb^V~UdYmx`#C4FChz2n+#oo@fgBRRn(zn-0rHJd zB|u&g)*o+k0^}QEN`M?91aH_Az&^t2X9UQAkv!SBAnURW&7QG*d0$t;Ft!LVkzoB~ zUMAaj(6k6pk>S8XmiEFiT9QG_a>L>v=w3Mt*4G!d5!~+txOcqxCg+3>tD`q0vc2sI l4*&oF0000000000fIo+#liFW~w)y}7002ovPDHLkV1nHqZn*#e literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/round_pageview_white_36.png b/app/src/main/res/drawable-xxxhdpi/round_pageview_white_36.png new file mode 100644 index 0000000000000000000000000000000000000000..0e9a226efd90ee8fee50b67366a4601f626e78ed GIT binary patch literal 1136 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=4hQ&zxB}__LmV7z(VY+UhGR*P zUoeA6{OaTP{~ul)&eQ+1ygL-w?AWVwPD3Tit;uCKbL;MP zjSJ%B?Itnbb-c(`!|Ptvd`vjTU}hGNkTFZZb@31vh0<8ZViuF@!dqr2EI8@p9+1;{ zz{!@^k#){1i`5xAV*OXLEkvL3M;*-GbndeLYy&@?8_iZ9ZoE6OxRSqrZvtP`!NUuK zA2IZE6bGLgw(he=C5AF)+&y|%zM<~(yyhSR3!Jf|EV zO$d^h#F%`+%g)g<=$6B!G@ez5ud2(N?&#`q{9fSOJk8#K?e4*^PIgKKS4~)-Hv2i) zW^-}bF@CjXdCJSed%|60-NI!H(k_T!lTE&mdqK0_{c^H>bGEmg)vUOlz_(WepF$F@IC=dN50=O`&T4st!euDeE+oIFtnUE$UG2c=5PPX_~^U z9=_{Lr_7G9#KCCL>eZhD4gW%s?aK;l$d(-l{C zW5-vEHcnJ14P23~;t?yN*z7pztn@yvleTWn9x7e@n@i5;{oLgwr^Rff#5GmiNQp_b zy@$hjsk2&#z?85Q2dS)T$6HUGJ`^h4brIVaSNdI~@Sx)ax0yzIx7K@z2d-7<==*G> nQ1-K8FWc!&IuP`_{ImUYU-s(cCwAe$JjdYa>gTe~DWM4f&a6{q literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/round_pageview_white_48.png b/app/src/main/res/drawable-xxxhdpi/round_pageview_white_48.png new file mode 100644 index 0000000000000000000000000000000000000000..71bafcd9129be77d9b54c412fc8d83b17076ad0d GIT binary patch literal 1427 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE8Azrw%`pX1hXZ^;of_Hx++*=YmBOf8m1`S47Uc1Bezg%=dD~4XZ(>W9;zYa7 z(pHu#yUtYW3(^x3QZp>=IMWC!MwW%3#G_V9oww zF7r9Y=M4+2_w3!h|Gce@jh(G+|1ovZguip|I!3%NG_jo6@a~H1o|}JIn4a-lBn7VS z=Hp-!%?NRCV&?KznIP@W8?n>lNbGMRX0v{eob1!w67MG*`Wq4Du(~&7m2V`Y@{*_1 zR9H=7mpl`D%Hkt+Vu9f_p$#_`C!dS+IKXXmidBi}+KD$#P6xF4BI0^Kv7XkN7M9O@ zq*#ZMQS`{lb=_a~KlpptagJoYgPh@<7aceE6$vgrDi`2*rQ6-`SoB+iZbgOu6{bhI z=Lwi5@vU&U`fo||zL*tSdl)NSro8CTcM*wX-WD+RMN{K2W+m zJ?MhN4c+Ji-T%y8=9sta-N5=rz-+lo7{}@jtTrjPH)<%ZQB*r{ddF)8wT4L>{cH~i zOD6;?v9|0?V%l}Hj_F=EXT{kv)e3dB1@m)DOOJ^abZ?MR-Q;qEJ^FwEm;UAJ2PWt~ zu)Z94E#S@u)&S|m?uIR|LR&&R^&hAoPF>}#v8;zNRijG!(gzuhwjM^YknJm%E1sKY z*pL>$d)d! zsGY#C@c*W%&V%@W_Y@oF_bqEE{<|-}^;m6ZjxS>}L*U+RM+Cbk`j@O&ko1{Fqv<@? zqn(>;99-JDt<1t34oUg04%m{u+V<~7kq@jIO^2?(KfkEa{`Ao|$)Ow?F2M(+7A(|U z@tJLg_!*{q44<1A^BXD;_E{d-lW<5nA@0LDAaUUluYtbCCZG}v>1#kG*^hV(^b7V! zGN0jgE2&~k$^Uv-@FL@r>(hQbj;R+8ZrJ($(t@3q_ro8VFxkAgp%TSt6)U96KUb`? zjB&2HkS_b&GKZ#{7fw%3FnyuRB(yrtl}TCXwUFnQ<0>JSU6s16I#Wz11o)*iUUy9D zHtY<3quBaQLm}|bzU~sSN=MFr3);Wj%3r(A_syQ!2e&r=ztzml2r3sG|6St`;!QXJ ZVsqTsf9Om88?^`!$J5o%Wt~$(69Byr)+7J` literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/round_public.png b/app/src/main/res/drawable-xxxhdpi/round_public.png new file mode 100644 index 0000000000000000000000000000000000000000..d241946df137af6be34a4ac2703ca1c455fb7858 GIT binary patch literal 2081 zcmdUw`#%#3AIEoL%FJc%VkVbkI2w;|PVO6WIU0?QkO?VHE;9^W#xU0qGr2@XHiyvM zrcTFYSU7IEM5|77%OxVY7LQ)fU-5ijug~}W%jcKRPwzCGi#<$KNfZD8z#PtE-HzD) zBgeo;KM+)M`UqV(XT0qZ5C6}vBkAX|qZ!sDH<$B(W9aiS*=2tZz3+dP5qVBe$TXzo zaFQMLWvxzId7;W*M$Bs;^JtkNd3)wfm_qzEve)Q>h8fMi>(5tItKvK--%ONT8~^|r zaKKvQ$-qzig}A4VCsICmN$atgEn#|UxtaZUUXLyxtc_jp5P_nFzjbg#CKHfm1AtN@ z$6KG#KX-&DII~}x94m<&x9?@_jaU{bA~x#!%+6F(+c=Y$JztkmeDcnP^~RCQ7134i zy4N|iG1HmK@2H=-eC{fa zeT==*Q0{sFbKV%d#xI5Xdx)PO=C|kE%3y`3qXk%;df9#x!mmB^qRMk=nV*JN)8c?M zI98>|b4+jP)(uFlK67fePNdCvn~8a(80956*Rp^r5eW&N?0CO)a6i%h>V_Wkt@Oc& z`HV~L$wp=q^Syt`8NDhfEL3G_0m+=0)&EVtZ$(~-pvJv9ryqmc!h)yOlcqFRiD26y zqYp+~w<~><;9*waKI7H%g;&7GLAn;TDmm z>bzjwnZvg|YEhvlY({0HzBnOH=C|6`AS-c|E_v)xcVMn)5dZ0b;FR-nZ9hzdWNQrE zkrWHr&he%}z<2NSb>G3GH!B5`wQG=T4t4QK2E#r zKilnL(zNX-Km0&<`(4dt!Vc=1PNbTO>l6cK?kE;qWiVKMOYT9xIVOFt*BZ^z{SPuO z5U1M(Xw=jf4-;!^G!*-Y{wV)&S1c}x?$fSGElO?l;~lFvgfb1dcKKlt_XMgix^GL7 zRJ!9gFE1|NUK1#w71h1 z!PRpd+D@qSP_e@3D<7*phE}%K8RA_(*Qv141uM<Y(3aE23UR5m_9Ua1X@&(o>$t z&FelsAcI7dS$EIAGAl&oJj){hUH|APr{4n!X((-AuNqzzR~IHiB~HK>zC$x*cv;DM zX}Wa^im06U_rEh@Ih>R<5O;*(*&r~e5Rw*l!_W(0Y3$btX&}~i7L02U!0W>Tkp@ea zbgxDWS^|iR4mvC4w&v+eD7TvL6Bfl`I!ggEB3yz?q(~y@Lpv@JFwQTj1;`F z0#Gyb+VqC5Equj4q8J~Yc0P1@`OOF~T0Z{zG=BV>+^?4PZZa<|?tNiiLbg`kgkJOL z%x=G4G!_PlO?K=A#b`4bm)s*d<+shiq54hQ8&o9yZsAg+?# zw_}J6kC?AQjraX{?inJxP9cBc#KVKp^LtsjC4-B!KP5jCp;SJ6Mv|_kX+DKsuCk?; z1Szzzh6^JlP};vI+U-;skGgt~QhGp(990~9N!IQ3UWJQ*MQI%G8+-i9R?b6Z3F+t) zP`RVS7qrATvj6}9 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/round_public_white_18.png b/app/src/main/res/drawable-xxxhdpi/round_public_white_18.png new file mode 100644 index 0000000000000000000000000000000000000000..41899cfffabb4b7d6c84e163d29e1be12c9a0d92 GIT binary patch literal 952 zcmV;p14sOcP)fiei9a7=q!$hoUHoVknBDD2iYhf}jY7A}EHUD2gH| zh9C$IzYmJxwUX=Iy-VE>fW9XGBzNz0E{vppB8|O|e<#L3t{j8?1(iNTgq$H!fu| ziF0Y(Vt79b`%pN`MX~;wFWz-7rw1P!fFdywgwwY(ers#ecZ7LbggU zT=GC2%*34+v3-##StuEf#r+Adfv+l1(FR^7F8}r|`pS0|Du7FIC;1noOj9i#DmLd0J7&Bh^08M{)f;gN;Q*HtqXM6lg=-C@gB;Hyn>t+dymL9*PeXk5r~hd@5i@ z9W%}|*rT|A5=MgmO85p{=Nar~o=H`LNH-xTY>FEcxy|u0L{u3m@dpzElM8|J0d*vFU9iCttnYdoj&sGq3i*}d;zAIn<4QsF(KnvHaVsj~HMd+lrUrAk+!E$fP&LZm1)4@KYKY&at{I&&6M<&H$aT zY_N-wa%31{D=a&#;v0sT$#052zG5Z3MQGzQj?lvpH+TfV7{76e3mjp0kyCb~(P%Up ajsF4VqI=7vBC~w}0000~;a0=eNCC`pdUp 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 pW + + diff --git a/app/src/main/res/drawable/round_close.xml b/app/src/main/res/drawable/round_close.xml new file mode 100644 index 0000000..57511cc --- /dev/null +++ b/app/src/main/res/drawable/round_close.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/round_language_24.xml b/app/src/main/res/drawable/round_language_24.xml new file mode 100644 index 0000000..e745325 --- /dev/null +++ b/app/src/main/res/drawable/round_language_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/round_pageview.xml b/app/src/main/res/drawable/round_pageview.xml new file mode 100644 index 0000000..6e39997 --- /dev/null +++ b/app/src/main/res/drawable/round_pageview.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/round_public_24.xml b/app/src/main/res/drawable/round_public_24.xml new file mode 100644 index 0000000..19fb425 --- /dev/null +++ b/app/src/main/res/drawable/round_public_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/round_search_24.xml b/app/src/main/res/drawable/round_search_24.xml new file mode 100644 index 0000000..c1818d5 --- /dev/null +++ b/app/src/main/res/drawable/round_search_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/activity_weather_provider.xml b/app/src/main/res/layout/activity_weather_provider.xml index d91ba84..2f01f41 100644 --- a/app/src/main/res/layout/activity_weather_provider.xml +++ b/app/src/main/res/layout/activity_weather_provider.xml @@ -1,5 +1,6 @@ - + android:src="@drawable/round_close" /> + + + + - + style="@style/AnotherWidget.Main.Subtitle"/> + - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_app_main.xml b/app/src/main/res/layout/fragment_app_main.xml index 28bbe62..ee129c1 100644 --- a/app/src/main/res/layout/fragment_app_main.xml +++ b/app/src/main/res/layout/fragment_app_main.xml @@ -129,7 +129,7 @@ app:tabTextAppearance="@style/AnotherWidget.Settings.Header" /> - - - + android:layout_height="match_parent" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_glance_settings.xml b/app/src/main/res/layout/fragment_glance_settings.xml index b06f702..172cdb2 100644 --- a/app/src/main/res/layout/fragment_glance_settings.xml +++ b/app/src/main/res/layout/fragment_glance_settings.xml @@ -38,9 +38,9 @@ + android:src="@drawable/round_pageview"/> + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/weather_provider_settings_layout.xml b/app/src/main/res/layout/weather_provider_settings_layout.xml new file mode 100644 index 0000000..28273fa --- /dev/null +++ b/app/src/main/res/layout/weather_provider_settings_layout.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 8424050..1d9ad3d 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -126,6 +126,35 @@ Raccoglieremo i dati sulla posizione per attivare l\'aggiornamento del meteo anche quando l\'app è chiusa o non in uso.\nNon utilizzeremo i tuoi dati in nessun altro modo. Provider meteo + Questo provider meteo necessita di una chiave API\nper un corretto funzionamento. + Questo provider meteo necessita di una chiave API\nper un corretto funzionamento. + Questo provider meteo necessita di una chiave API\nper un corretto funzionamento. + Questo provider meteo necessita di una chiave API\nper un corretto funzionamento. + Questo provider meteo necessita di una chiave API\nper un corretto funzionamento. + Questo provider meteo funziona\nsolo negli Stati Uniti. + Questo provider meteo funziona unicamente in gradi Celsius. + + Apri il sito del provider, crea un account gratuito e personale.\nCerca la chiave API di default nelle impostazioni e copiala qui. + Apri il sito del provider, crea un account gratuito e personale.\nCerca la chiave API di default nelle impostazioni e copiala qui. + Apri il sito del provider, crea un account gratuito e personale.\nCerca la chiave API di default nelle impostazioni e copiala qui. + Apri il sito del provider, crea un account gratuito e personale.\nCerca la chiave API di default nelle impostazioni e copiala qui. + Apri il sito del provider, crea un account gratuito e personale.\nCerca la chiave API di default nelle impostazioni e copiala qui. + + + + Il provider meteo che hai selezionato\nnecessita di una chiave API. + La posizione attuale non è supportata da questo provider. + Seleziona una posizione valida. + Sembra che la tua chiave API sia scaduta. + La chiave API non è valida o deve ancora essere attivata. + Verifica la configurazione del provider meteo. + Errore di connessione. + Errore, verifica la configurazione del provider meteo. + Account richiesto + Solo US + Scegli provider + Scegli un provider meteo.\nAlcuni provider richiedono la creazione di un account personale, ma è grauito e permette di avere migliori prestazioni. + Orologio Tap sull\'orologio apre @@ -161,7 +190,8 @@ Passi fatti Livello batteria basso %d passi fatti finora - Carica + In carica + Carica completa Providers Glance info will show up only when there are no events displayed and only when a few conditions are verified. Player Musica diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4bdc3ae..8623436 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -112,8 +112,8 @@ Weather info is hidden Tap on weather opens Weather API key - The weather provider is configured correctly - The weather provider must be configured + The weather provider is configured correctly. + The weather provider must be configured. OpenWeather API Key Google Weather Google Awareness weather has been deprecated. It\'s now required an OpenWeather API key to show the weather in the widget. @@ -130,21 +130,13 @@ We will collect location data to update the weather information even when the app is closed or not in use.\nWe will not use these data otherwise. Weather provider - Open Weather Map - Weatherbit.io - Weatherapi.com - Here.com - Accuweather.com - Weather.gov (US)\nPowered by National Weather Services - YR.no/Met.no\nPowered by Meteorological Institute - - Open openweathermap.com - Open weatherbit.io - Open weatherapi.com - Open here.com - Open Accuweather.com - Open Weather.gov - Open yr.no + Open Weather Map + Weatherbit.io + Weatherapi.com + Here.com + Accuweather.com + Weather.gov (US)\nPowered by National Weather Services + YR.no/Met.no\nPowered by Meteorological Institute This weather provider needs\nan API key to work correctly. This weather provider needs\nan API key to work correctly. @@ -168,6 +160,12 @@ It seems that your API key has expired. API key not valid, or not yet activated. The weather provider is wrongly configured. + Connection error. + Something went wrong, check the weather provider config. + Account required + US Only + Select a provider + Select a weather provider from the list.\nA few providers need a free personal account,\nbut they\'re usually more accurate. Clock @@ -204,7 +202,8 @@ Daily steps Low battery level %d steps so far - Charged + Charging + Charged Providers Glance info will show up only when there are no events displayed and only when a few conditions are verified. Music Players diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 551dccf..99b870b 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -2,7 +2,6 @@