diff --git a/ANT-Android-SDKs b/ANT-Android-SDKs index 9320023..0e8cea7 160000 --- a/ANT-Android-SDKs +++ b/ANT-Android-SDKs @@ -1 +1 @@ -Subproject commit 9320023db361a6140168aede685279be1dee2ce2 +Subproject commit 0e8cea714a231fb9565170d4ed01eafa868f9798 diff --git a/app/build.gradle b/app/build.gradle index 174f46b..54670fd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,13 +6,18 @@ def getGitHash = providers.exec { android { // Travis update separately - compileSdkVersion = 34 - buildToolsVersion = '35.0.0' + compileSdkVersion = 35 + buildToolsVersion = '36.0.0' namespace "com.atrainingtracker" + compileOptions { + sourceCompatibility JavaVersion.toVersion("17") + targetCompatibility JavaVersion.toVersion("17") + } + defaultConfig { minSdkVersion 26 // Android 8 - targetSdkVersion 34 // Android 14 + targetSdkVersion 35 // Android 15 multiDexEnabled true versionName "4.2.99.1" versionCode 217 @@ -73,14 +78,14 @@ dependencies { implementation 'androidx.preference:preference:1.2.1' implementation 'androidx.appcompat:appcompat:1.7.0' - implementation 'androidx.work:work-runtime:2.9.0' - implementation 'androidx.activity:activity:1.9.1' + implementation 'androidx.work:work-runtime:2.10.1' + implementation 'androidx.activity:activity:1.10.1' implementation 'com.google.android.material:material:1.12.0' - implementation 'com.google.android.gms:play-services-maps:19.0.0' + implementation 'com.google.android.gms:play-services-maps:19.2.0' implementation 'com.google.android.gms:play-services-location:21.3.0' - implementation platform('com.google.firebase:firebase-bom:33.1.2') + implementation platform('com.google.firebase:firebase-bom:33.14.0') implementation 'com.google.firebase:firebase-analytics' // No version needed with BOM implementation 'com.dropbox.core:dropbox-core-sdk:7.0.0' diff --git a/app/lint-baseline.xml b/app/lint-baseline.xml index d32931c..2d407b2 100644 --- a/app/lint-baseline.xml +++ b/app/lint-baseline.xml @@ -1,5 +1,5 @@ - + + + + + - + { + dialog.dismiss(); + mShowingDialog = false; }); final ArrayList deviceTypeList = new ArrayList<>(Arrays.asList(DeviceType.getRemoteDeviceTypes(mProtocol))); @@ -228,15 +213,6 @@ public boolean onOptionsItemSelected(MenuItem item) { return false; } - - private void cancelDialog(DialogInterface dialog) { - dialog.dismiss(); - if (getActivity() != null) { - getActivity().onBackPressed(); - } - mShowingDialog = false; - } - protected void setSectionsPagerAdapter() { if (DEBUG) Log.w(TAG, "setSectionsPagerAdapter"); diff --git a/app/src/main/java/com/atrainingtracker/trainingtracker/activities/ConfigViewsActivity.java b/app/src/main/java/com/atrainingtracker/trainingtracker/activities/ConfigViewsActivity.java index 3ed3ad7..0002689 100644 --- a/app/src/main/java/com/atrainingtracker/trainingtracker/activities/ConfigViewsActivity.java +++ b/app/src/main/java/com/atrainingtracker/trainingtracker/activities/ConfigViewsActivity.java @@ -18,14 +18,22 @@ package com.atrainingtracker.trainingtracker.activities; +import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; + +import androidx.core.graphics.Insets; +import androidx.core.view.OnApplyWindowInsetsListener; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import android.util.Log; +import android.view.View; +import android.view.ViewGroup; import android.view.WindowManager; import com.atrainingtracker.R; @@ -81,6 +89,22 @@ protected void onCreate(Bundle savedInstanceState) { // supportAB.setHomeAsUpIndicator(R.drawable.abc_ic_ab_back_mtrl_am_alpha); // supportAB.setDisplayHomeAsUpEnabled(true); + View rootView = findViewById(R.id.main_activity_without_navigation_layout); + + ViewCompat.setOnApplyWindowInsetsListener( + rootView, + new OnApplyWindowInsetsListener() { + @NonNull + @Override + public WindowInsetsCompat onApplyWindowInsets( + @NonNull View v, @NonNull WindowInsetsCompat windowInsets) { + Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(insets.left, 0, insets.right, insets.bottom); + ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) v.getLayoutParams(); + mlp.topMargin = insets.top; + return WindowInsetsCompat.CONSUMED; + } + }); showMainFragment(); } diff --git a/app/src/main/java/com/atrainingtracker/trainingtracker/activities/MainActivityWithNavigation.java b/app/src/main/java/com/atrainingtracker/trainingtracker/activities/MainActivityWithNavigation.java index a6dcfd0..76dc856 100644 --- a/app/src/main/java/com/atrainingtracker/trainingtracker/activities/MainActivityWithNavigation.java +++ b/app/src/main/java/com/atrainingtracker/trainingtracker/activities/MainActivityWithNavigation.java @@ -21,6 +21,7 @@ import android.Manifest; import androidx.activity.OnBackPressedCallback; +import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import android.annotation.SuppressLint; @@ -45,6 +46,10 @@ import com.google.android.material.navigation.NavigationView; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; +import androidx.core.graphics.Insets; +import androidx.core.view.OnApplyWindowInsetsListener; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; import androidx.core.view.GravityCompat; @@ -61,6 +66,8 @@ import android.provider.Settings; import android.util.Log; import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; import android.view.WindowManager; import android.widget.TextView; import android.widget.Toast; @@ -321,6 +328,20 @@ protected void onCreate(Bundle savedInstanceState) { dialog.show(); } } + ViewCompat.setOnApplyWindowInsetsListener( + mDrawerLayout, + new OnApplyWindowInsetsListener() { + @NonNull + @Override + public WindowInsetsCompat onApplyWindowInsets( + @NonNull View v, @NonNull WindowInsetsCompat windowInsets) { + Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(insets.left, 0, insets.right, insets.bottom); + ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) v.getLayoutParams(); + mlp.topMargin = insets.top; + return WindowInsetsCompat.CONSUMED; + } + }); getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) { diff --git a/app/src/main/java/com/atrainingtracker/trainingtracker/activities/SegmentDetailsActivity.java b/app/src/main/java/com/atrainingtracker/trainingtracker/activities/SegmentDetailsActivity.java index 82b54c0..4ba53de 100644 --- a/app/src/main/java/com/atrainingtracker/trainingtracker/activities/SegmentDetailsActivity.java +++ b/app/src/main/java/com/atrainingtracker/trainingtracker/activities/SegmentDetailsActivity.java @@ -25,6 +25,11 @@ import com.google.android.material.navigation.NavigationView; import androidx.activity.OnBackPressedCallback; +import androidx.annotation.NonNull; +import androidx.core.graphics.Insets; +import androidx.core.view.OnApplyWindowInsetsListener; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; import androidx.core.view.GravityCompat; @@ -35,6 +40,8 @@ import androidx.appcompat.widget.Toolbar; import android.util.Log; import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; import android.view.WindowManager; import com.atrainingtracker.R; @@ -121,6 +128,21 @@ public void onCreate(Bundle savedInstanceState) { // now, create and show the main fragment onNavigationItemSelected(mNavigationView.getMenu().findItem(mSelectedFragmentId)); + ViewCompat.setOnApplyWindowInsetsListener( + mDrawerLayout, + new OnApplyWindowInsetsListener() { + @NonNull + @Override + public WindowInsetsCompat onApplyWindowInsets( + @NonNull View v, @NonNull WindowInsetsCompat windowInsets) { + Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(insets.left, 0, insets.right, insets.bottom); + ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) v.getLayoutParams(); + mlp.topMargin = insets.top; + return WindowInsetsCompat.CONSUMED; + } + }); + getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) { @Override diff --git a/app/src/main/java/com/atrainingtracker/trainingtracker/activities/WorkoutDetailsActivity.java b/app/src/main/java/com/atrainingtracker/trainingtracker/activities/WorkoutDetailsActivity.java index 440fd4a..f522b81 100644 --- a/app/src/main/java/com/atrainingtracker/trainingtracker/activities/WorkoutDetailsActivity.java +++ b/app/src/main/java/com/atrainingtracker/trainingtracker/activities/WorkoutDetailsActivity.java @@ -27,7 +27,12 @@ import com.google.android.material.navigation.NavigationView; import androidx.activity.OnBackPressedCallback; +import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; +import androidx.core.graphics.Insets; +import androidx.core.view.OnApplyWindowInsetsListener; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; import androidx.core.view.GravityCompat; @@ -39,6 +44,7 @@ import android.util.Log; import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; import android.view.WindowManager; import com.atrainingtracker.R; @@ -141,6 +147,22 @@ public void onCreate(Bundle savedInstanceState) { // now, calc the extrema values in the background (new CalcExtremaValuesThread(this, findViewById(R.id.tvProgressMessage), mWorkoutID)).start(); } + // knappar beskärda + + ViewCompat.setOnApplyWindowInsetsListener( + mDrawerLayout, + new OnApplyWindowInsetsListener() { + @NonNull + @Override + public WindowInsetsCompat onApplyWindowInsets( + @NonNull View v, @NonNull WindowInsetsCompat windowInsets) { + Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(insets.left, 0, insets.right, insets.bottom); + ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) v.getLayoutParams(); + mlp.topMargin = insets.top; + return windowInsets; + } + }); getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) { diff --git a/app/src/main/java/com/atrainingtracker/trainingtracker/dialogs/LapSummaryDialog.java b/app/src/main/java/com/atrainingtracker/trainingtracker/dialogs/LapSummaryDialog.java index 6fee7ab..9a3b2fc 100644 --- a/app/src/main/java/com/atrainingtracker/trainingtracker/dialogs/LapSummaryDialog.java +++ b/app/src/main/java/com/atrainingtracker/trainingtracker/dialogs/LapSummaryDialog.java @@ -133,6 +133,7 @@ public void run() { } }; + // todo ondismiss() alert.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { diff --git a/app/src/main/java/com/atrainingtracker/trainingtracker/fragments/EditWorkoutFragment.java b/app/src/main/java/com/atrainingtracker/trainingtracker/fragments/EditWorkoutFragment.java index 5da83b1..4ff3338 100644 --- a/app/src/main/java/com/atrainingtracker/trainingtracker/fragments/EditWorkoutFragment.java +++ b/app/src/main/java/com/atrainingtracker/trainingtracker/fragments/EditWorkoutFragment.java @@ -19,6 +19,9 @@ package com.atrainingtracker.trainingtracker.fragments; import android.app.Activity; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import android.app.Dialog; import android.content.BroadcastReceiver; @@ -32,6 +35,10 @@ import android.os.Bundle; import androidx.core.content.ContextCompat; +import androidx.core.graphics.Insets; +import androidx.core.view.OnApplyWindowInsetsListener; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; import androidx.fragment.app.Fragment; import androidx.work.OneTimeWorkRequest; import androidx.work.WorkManager; @@ -374,7 +381,7 @@ public void onClick(View view) { getActivity().setResult(Activity.RESULT_CANCELED, resultIntent); } - getActivity().onBackPressed(); + getActivity().getOnBackPressedDispatcher().onBackPressed(); } }); @@ -396,15 +403,42 @@ public void onClick(View v) { } @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - if (DEBUG) Log.d(TAG, "onActivityCreated"); + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + if (DEBUG) Log.d(TAG, "onViewCreated"); // register receivers ContextCompat.registerReceiver(getActivity(), mFinishedCalculatingExtremaValueReceiver, mFinishedCalculatingExtremaValueFilter, ContextCompat.RECEIVER_NOT_EXPORTED); ContextCompat.registerReceiver(getActivity(), mFinishedGuessingCommuteAndTrainerReceiver, mFinishedGuessingCommuteAndTrainerFilter, ContextCompat.RECEIVER_NOT_EXPORTED); ContextCompat.registerReceiver(getActivity(), mFinishedCalculatingFancyNameReceiver, mFinishedCalculatingFancyNameFilter, ContextCompat.RECEIVER_NOT_EXPORTED); + ViewCompat.setOnApplyWindowInsetsListener(view, new OnApplyWindowInsetsListener() { + @NonNull + @Override + public WindowInsetsCompat onApplyWindowInsets(@NonNull View v, @NonNull WindowInsetsCompat windowInsets) { + Insets navBarInsets = windowInsets.getInsets(WindowInsetsCompat.Type.navigationBars()); + Insets imeInsets = windowInsets.getInsets(WindowInsetsCompat.Type.ime()); + int bottomPadding = navBarInsets.bottom + imeInsets.bottom; + v.setPadding( + v.getPaddingLeft(), + v.getPaddingTop(), + v.getPaddingRight(), + bottomPadding + ); + Insets systemGestureInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemGestures()); + return WindowInsetsCompat.CONSUMED; + } + }); + + // Request initial insets apply in case the listener was set up after the first dispatch + // (though with setOnApplyWindowInsetsListener, it usually gets called immediately if insets are available) + ViewCompat.requestApplyInsets(view); + // register receivers (moved from onActivityCreated for modern Fragment lifecycle) + if (getActivity() != null) { + ContextCompat.registerReceiver(getActivity(), mFinishedCalculatingExtremaValueReceiver, mFinishedCalculatingExtremaValueFilter, ContextCompat.RECEIVER_NOT_EXPORTED); + ContextCompat.registerReceiver(getActivity(), mFinishedGuessingCommuteAndTrainerReceiver, mFinishedGuessingCommuteAndTrainerFilter, ContextCompat.RECEIVER_NOT_EXPORTED); + ContextCompat.registerReceiver(getActivity(), mFinishedCalculatingFancyNameReceiver, mFinishedCalculatingFancyNameFilter, ContextCompat.RECEIVER_NOT_EXPORTED); + } // fill the views // first, remove all TODO: still necessary? diff --git a/app/src/main/res/layout/edit_workout.xml b/app/src/main/res/layout/edit_workout.xml index 9690f4d..0b15542 100644 --- a/app/src/main/res/layout/edit_workout.xml +++ b/app/src/main/res/layout/edit_workout.xml @@ -18,6 +18,7 @@ --> diff --git a/app/src/main/res/layout/main_activity_without_navigation.xml b/app/src/main/res/layout/main_activity_without_navigation.xml index a9c0dc7..616b77d 100644 --- a/app/src/main/res/layout/main_activity_without_navigation.xml +++ b/app/src/main/res/layout/main_activity_without_navigation.xml @@ -19,6 +19,7 @@ diff --git a/build.gradle b/build.gradle index 6fea86a..d891b45 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.5.1' + classpath 'com.android.tools.build:gradle:8.10.1' classpath 'com.google.gms:google-services:4.4.2' classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.2' } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37ce1f9..4beaab4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Jul 18 13:25:25 CEST 2024 +#Wed Oct 16 23:21:35 CEST 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists