diff --git a/app/build.gradle b/app/build.gradle --- a/app/build.gradle +++ b/app/build.gradle @@ -4,14 +4,14 @@ android { - compileSdk 34 + compileSdk 35 namespace "it.reyboz.bustorino" defaultConfig { applicationId "it.reyboz.bustorino" minSdkVersion 21 - targetSdkVersion 34 - buildToolsVersion = '34.0.0' + targetSdkVersion 35 + buildToolsVersion = '35.0.1' versionCode 62 versionName "2.3.1" vectorDrawables.useSupportLibrary = true @@ -65,6 +65,10 @@ androidResources { generateLocaleConfig true } + + buildFeatures{ + buildConfig = true + } } dependencies { @@ -114,8 +118,7 @@ implementation 'com.google.protobuf:protobuf-java:3.19.6' // mqtt library implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5' - implementation 'com.github.fabmazz:paho.mqtt.android:v1.0.0' - + implementation 'com.github.hannesa2:paho.mqtt.android:4.4' // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" // LiveData diff --git a/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java b/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java --- a/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java +++ b/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java @@ -24,6 +24,7 @@ import android.content.pm.PackageManager; import android.content.res.Configuration; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.util.Log; import android.view.Gravity; @@ -39,6 +40,7 @@ import androidx.appcompat.widget.Toolbar; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.core.view.GravityCompat; +import androidx.core.view.ViewCompat; import androidx.drawerlayout.widget.DrawerLayout; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; @@ -84,6 +86,10 @@ super.onCreate(savedInstanceState); Log.d(DEBUG_TAG, "onCreate, savedInstanceState is: "+savedInstanceState); setContentView(R.layout.activity_principal); + /*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + getWindow().setNavigationBarContrastEnforced(false); + } + */ boolean showingArrivalsFromIntent = false; Toolbar mToolbar = findViewById(R.id.default_toolbar); @@ -94,7 +100,6 @@ mToolbar.setOnMenuItemClickListener(new ToolbarItemClickListener(this)); - mDrawer = findViewById(R.id.drawer_layout); drawerToggle = setupDrawerToggle(mToolbar); diff --git a/app/src/main/java/it/reyboz/bustorino/ActivitySettings.java b/app/src/main/java/it/reyboz/bustorino/ActivitySettings.java --- a/app/src/main/java/it/reyboz/bustorino/ActivitySettings.java +++ b/app/src/main/java/it/reyboz/bustorino/ActivitySettings.java @@ -1,6 +1,7 @@ package it.reyboz.bustorino; import android.os.Bundle; +import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import androidx.appcompat.app.ActionBar; @@ -14,10 +15,11 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_settings); - + Toolbar mToolbar = findViewById(R.id.default_toolbar); + setSupportActionBar(mToolbar); ActionBar ab = getSupportActionBar(); if(ab!=null) { - ab.setIcon(R.drawable.ic_launcher); + //ab.setIcon(R.drawable.ic_launcher); ab.setDisplayHomeAsUpEnabled(true); } else { Log.e("SETTINGS_ACTIV","ACTION BAR IS NULL"); diff --git a/app/src/main/java/it/reyboz/bustorino/backend/mato/MQTTMatoClient.kt b/app/src/main/java/it/reyboz/bustorino/backend/mato/MQTTMatoClient.kt --- a/app/src/main/java/it/reyboz/bustorino/backend/mato/MQTTMatoClient.kt +++ b/app/src/main/java/it/reyboz/bustorino/backend/mato/MQTTMatoClient.kt @@ -159,7 +159,11 @@ //if (done) break if (v.isEmpty()){ //actually unsubscribe - client?.unsubscribe( mapTopic(line)) + try { + client?.unsubscribe(mapTopic(line)) + } catch (e: Exception){ + Log.e(DEBUG_TAG, "Tried unsubscribing but there was an error in the client library:\n$e") + } } removed = done || removed } diff --git a/app/src/main/java/it/reyboz/bustorino/data/MatoPatternsDownloadWorker.kt b/app/src/main/java/it/reyboz/bustorino/data/MatoPatternsDownloadWorker.kt --- a/app/src/main/java/it/reyboz/bustorino/data/MatoPatternsDownloadWorker.kt +++ b/app/src/main/java/it/reyboz/bustorino/data/MatoPatternsDownloadWorker.kt @@ -86,7 +86,7 @@ Log.d(DEBUG_TAG, "Request to download and insert patterns for ${routesIds.size} routes, proceed: $runNewWork, workstate: $addDat") if(runNewWork){ - val routeIdsArray = routesIds.toTypedArray() + val routeIdsArray: Array = routesIds.toTypedArray() val dataBuilder = Data.Builder().putStringArray(ROUTES_KEYS,routeIdsArray) val requ = OneTimeWorkRequest.Builder(MatoPatternsDownloadWorker::class.java) diff --git a/app/src/main/java/it/reyboz/bustorino/data/MatoTripsDownloadWorker.kt b/app/src/main/java/it/reyboz/bustorino/data/MatoTripsDownloadWorker.kt --- a/app/src/main/java/it/reyboz/bustorino/data/MatoTripsDownloadWorker.kt +++ b/app/src/main/java/it/reyboz/bustorino/data/MatoTripsDownloadWorker.kt @@ -125,7 +125,7 @@ null else info[0].state Log.d(debugTag, "Request to download and insert ${trips.size} trips, proceed: $runNewWork, workstate: $addDat") if(runNewWork) { - val tripsArr = trips.toTypedArray() + val tripsArr: Array = trips.toTypedArray() val dataBuilder = Data.Builder().putStringArray(TRIPS_KEYS, tripsArr) //build() val requ = OneTimeWorkRequest.Builder(MatoTripsDownloadWorker::class.java) diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/GeneralMapLibreFragment.kt b/app/src/main/java/it/reyboz/bustorino/fragments/GeneralMapLibreFragment.kt --- a/app/src/main/java/it/reyboz/bustorino/fragments/GeneralMapLibreFragment.kt +++ b/app/src/main/java/it/reyboz/bustorino/fragments/GeneralMapLibreFragment.kt @@ -76,6 +76,7 @@ } } + @Deprecated("Deprecated in Java") override fun onLowMemory() { super.onLowMemory() mapView.onLowMemory() diff --git a/app/src/main/java/it/reyboz/bustorino/middleware/AppLocationManager.kt b/app/src/main/java/it/reyboz/bustorino/middleware/AppLocationManager.kt --- a/app/src/main/java/it/reyboz/bustorino/middleware/AppLocationManager.kt +++ b/app/src/main/java/it/reyboz/bustorino/middleware/AppLocationManager.kt @@ -178,6 +178,7 @@ } } + @Deprecated("Deprecated in Java") override fun onStatusChanged(provider: String, status: Int, extras: Bundle) { //IF ANOTHER LOCATION SOURCE IS READY, USE IT //OTHERWISE, SIGNAL THAT WE HAVE NO LOCATION diff --git a/app/src/main/java/it/reyboz/bustorino/middleware/GeneralActivity.java b/app/src/main/java/it/reyboz/bustorino/middleware/GeneralActivity.java --- a/app/src/main/java/it/reyboz/bustorino/middleware/GeneralActivity.java +++ b/app/src/main/java/it/reyboz/bustorino/middleware/GeneralActivity.java @@ -22,10 +22,8 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; -import android.content.res.Resources; import android.graphics.Rect; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; +import android.os.Build; import com.google.android.material.snackbar.Snackbar; import androidx.annotation.Nullable; @@ -169,4 +167,25 @@ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); } + + protected void setSystemBarAppearance(boolean isSystemInDarkTheme) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + if (isSystemInDarkTheme) { + if (getWindow() != null && getWindow().getInsetsController() != null) { + getWindow().getInsetsController().setSystemBarsAppearance( + 0, + android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS + ); + } + } else { + if (getWindow() != null && getWindow().getInsetsController() != null) { + getWindow().getInsetsController().setSystemBarsAppearance( + android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS, + android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS + ); + } + } + } + } + } diff --git a/app/src/main/java/it/reyboz/bustorino/util/ViewUtils.kt b/app/src/main/java/it/reyboz/bustorino/util/ViewUtils.kt --- a/app/src/main/java/it/reyboz/bustorino/util/ViewUtils.kt +++ b/app/src/main/java/it/reyboz/bustorino/util/ViewUtils.kt @@ -13,18 +13,41 @@ import android.view.animation.Animation import android.view.animation.Transformation import android.widget.Toast +import androidx.core.view.OnApplyWindowInsetsListener +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import androidx.core.widget.NestedScrollView import it.reyboz.bustorino.R import it.reyboz.bustorino.backend.Stop -import it.reyboz.bustorino.fragments.LinesDetailFragment -import it.reyboz.bustorino.fragments.LinesDetailFragment.Companion import java.io.IOException class ViewUtils { companion object{ + const val DEBUG_TAG="BusTO:ViewUtils" + + /** + * This should help in setting the padding of the last component down + */ + @JvmStatic + fun doOnApplyWindowInsetsForNavigationBars(view: View, listener: OnNavigationBarInsetsAppliedListener) { + ViewCompat.setOnApplyWindowInsetsListener( + view, + OnApplyWindowInsetsListener { v: View?, insets: WindowInsetsCompat? -> + val navigationBarsInsetsBottom = insets!!.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom + listener.onInsetsApplied(v, navigationBarsInsetsBottom) + insets + }) + view.requestApplyInsets() + } + + + interface OnNavigationBarInsetsAppliedListener { + fun onInsetsApplied(view: View?, navigationBarHeight: Int) + } + fun isViewFullyVisibleInScroll(view: View, scrollView: NestedScrollView): Boolean { val scrollBounds = Rect() scrollView.getDrawingRect(scrollBounds) diff --git a/app/src/main/res/layout/activity_principal.xml b/app/src/main/res/layout/activity_principal.xml --- a/app/src/main/res/layout/activity_principal.xml +++ b/app/src/main/res/layout/activity_principal.xml @@ -4,7 +4,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_height="match_parent"> - @@ -13,16 +13,24 @@ + android:layout_height="wrap_content" + android:layout_alignParentTop="true" + android:layout_alignParentStart="true" + android:layout_alignParentEnd="true"/> + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + android:layout_alignParentStart="true" + android:layout_alignParentEnd="true" + /> - + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -14,8 +14,19 @@ android:layout_gravity="start"> --> + + \ No newline at end of file diff --git a/app/src/main/res/layout/default_toobar.xml b/app/src/main/res/layout/default_toobar.xml --- a/app/src/main/res/layout/default_toobar.xml +++ b/app/src/main/res/layout/default_toobar.xml @@ -3,15 +3,13 @@ xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:id="@+id/default_toolbar" + android:layout_height="?attr/actionBarSize" + android:id="@+id/default_toolbar" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" android:background="?attr/colorPrimary" android:fitsSystemWindows="true" - android:minHeight="?attr/actionBarSize" - android:elevation="4dp" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> \ No newline at end of file diff --git a/app/src/main/res/values-v35/styles.xml b/app/src/main/res/values-v35/styles.xml new file mode 100644 --- /dev/null +++ b/app/src/main/res/values-v35/styles.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -290,8 +290,7 @@ @string/positions_source_mato_descr @string/positions_source_gtfsrt_descr - MaTO (updated more frequently, might be offline) - GTFS RT (more stable, less frequently updated) + Style of the map Versatiles (vector) OSM legacy (raster, lighter) diff --git a/build.gradle b/build.gradle --- a/build.gradle +++ b/build.gradle @@ -9,12 +9,13 @@ } + //TODO: Migrate tfrom kapt to KSP //kotlin - ext.kotlin_version = '1.9.21' - ext.coroutines_version = "1.8.0" + ext.kotlin_version = '2.1.10' + ext.coroutines_version = "1.10.2" dependencies { - classpath 'com.android.tools.build:gradle:8.5.2' + classpath 'com.android.tools.build:gradle:8.6.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -27,7 +28,7 @@ //libraries versions fragment_version = "1.6.1" activity_version = "1.7.2" - appcompat_version = "1.6.1" + appcompat_version = "1.7.0" preference_version = "1.2.1" work_version = "2.9.0"