Android 16 support, fix edge to edge
This commit is contained in:
+1
-1
@@ -21,7 +21,7 @@ android {
|
||||
defaultConfig {
|
||||
applicationId "it.danieleverducci.nextcloudmaps"
|
||||
minSdkVersion 23
|
||||
targetSdkVersion 34
|
||||
targetSdkVersion 36
|
||||
compileSdkVersion 34
|
||||
versionCode 9
|
||||
versionName "0.4.0"
|
||||
|
||||
+2
@@ -9,6 +9,8 @@ import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import org.osmdroid.views.overlay.TilesOverlay;
|
||||
|
||||
import it.danieleverducci.nextcloudmaps.utils.EdgeToEdgeUtils;
|
||||
|
||||
public class NextcloudMapsStyledActivity extends AppCompatActivity {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -31,12 +31,14 @@ import androidx.appcompat.widget.Toolbar;
|
||||
import it.danieleverducci.nextcloudmaps.BuildConfig;
|
||||
import it.danieleverducci.nextcloudmaps.R;
|
||||
import it.danieleverducci.nextcloudmaps.activity.NextcloudMapsStyledActivity;
|
||||
import it.danieleverducci.nextcloudmaps.utils.EdgeToEdgeUtils;
|
||||
|
||||
public class AboutActivity extends NextcloudMapsStyledActivity {
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_about);
|
||||
EdgeToEdgeUtils.clearSystemInsets(this);
|
||||
|
||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
@@ -49,6 +49,7 @@ import it.danieleverducci.nextcloudmaps.api.ApiProvider;
|
||||
import it.danieleverducci.nextcloudmaps.fragments.GeofavoriteListFragment;
|
||||
import it.danieleverducci.nextcloudmaps.fragments.GeofavoriteMapFragment;
|
||||
import it.danieleverducci.nextcloudmaps.repository.GeofavoriteRepository;
|
||||
import it.danieleverducci.nextcloudmaps.utils.EdgeToEdgeUtils;
|
||||
import it.danieleverducci.nextcloudmaps.utils.SettingsManager;
|
||||
|
||||
public class MainActivity extends NextcloudMapsStyledActivity {
|
||||
@@ -118,6 +119,7 @@ public class MainActivity extends NextcloudMapsStyledActivity {
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
EdgeToEdgeUtils.clearSystemInsets(this);
|
||||
|
||||
boolean showMap = SettingsManager.isGeofavoriteListShownAsMap(this);
|
||||
if (showMap)
|
||||
|
||||
+2
@@ -32,6 +32,7 @@ import it.danieleverducci.nextcloudmaps.R;
|
||||
import it.danieleverducci.nextcloudmaps.activity.NextcloudMapsStyledActivity;
|
||||
import it.danieleverducci.nextcloudmaps.activity.detail.GeofavoriteDetailActivity;
|
||||
import it.danieleverducci.nextcloudmaps.databinding.ActivityMapPickerBinding;
|
||||
import it.danieleverducci.nextcloudmaps.utils.EdgeToEdgeUtils;
|
||||
import it.danieleverducci.nextcloudmaps.utils.GeoUriParser;
|
||||
import it.danieleverducci.nextcloudmaps.utils.MapUtils;
|
||||
|
||||
@@ -70,6 +71,7 @@ public class MapPickerActivity extends NextcloudMapsStyledActivity {
|
||||
mViewHolder.centerMapOn(l.getLatitude(), l.getLongitude());
|
||||
|
||||
setContentView(mViewHolder.getRootView());
|
||||
EdgeToEdgeUtils.clearSystemInsets(this);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+2
@@ -25,6 +25,7 @@ import androidx.appcompat.widget.Toolbar;
|
||||
|
||||
import it.danieleverducci.nextcloudmaps.R;
|
||||
import it.danieleverducci.nextcloudmaps.activity.NextcloudMapsStyledActivity;
|
||||
import it.danieleverducci.nextcloudmaps.utils.EdgeToEdgeUtils;
|
||||
import it.danieleverducci.nextcloudmaps.utils.SettingsManager;
|
||||
|
||||
public class SettingsActivity extends NextcloudMapsStyledActivity {
|
||||
@@ -32,6 +33,7 @@ public class SettingsActivity extends NextcloudMapsStyledActivity {
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_settings);
|
||||
EdgeToEdgeUtils.clearSystemInsets(this);
|
||||
|
||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
package it.danieleverducci.nextcloudmaps.utils;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.os.Build;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.view.ViewCompat;
|
||||
|
||||
import it.danieleverducci.nextcloudmaps.R;
|
||||
|
||||
public class EdgeToEdgeUtils {
|
||||
|
||||
/**
|
||||
* Called in an activity's onCreate method, adds paddings to clear the system bars, in any orientation,
|
||||
* to make all the content visible. Useful to adapt an old android project to the mandatory introduction
|
||||
* of edge to edge in Android 15.
|
||||
* @param a the activity to pad
|
||||
*/
|
||||
public static void clearSystemInsets(Activity a) {
|
||||
// This color will be used as background in the system bars in case of edge to edge.
|
||||
// Defaults to R.color.colorAccent, if defined, black otherwise.
|
||||
int accentColor = ContextCompat.getColor(a, R.color.defaultBackground);
|
||||
|
||||
ViewGroup rootLayout = a.findViewById(android.R.id.content);
|
||||
rootLayout.setBackgroundColor(accentColor);
|
||||
|
||||
// Register to receive insets callbacks
|
||||
ViewCompat.setOnApplyWindowInsetsListener(rootLayout, (v, insets) -> {
|
||||
// Top padding is the device insets plus the actionbar height
|
||||
boolean hasActionBar = a.getActionBar() != null && a.getActionBar().isShowing();
|
||||
int actionbarHeightInPixels = 0;
|
||||
if (hasActionBar && Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
|
||||
Context context = rootLayout.getContext();
|
||||
TypedValue tv = new TypedValue();
|
||||
if (context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
|
||||
actionbarHeightInPixels = TypedValue.complexToDimensionPixelSize(tv.data, context.getResources().getDisplayMetrics());
|
||||
}
|
||||
int topPadding = insets.getStableInsetTop() + actionbarHeightInPixels;
|
||||
v.setPadding(insets.getStableInsetLeft(), topPadding, insets.getStableInsetRight(), insets.getStableInsetBottom());
|
||||
return insets;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user