Compare commits

...
5 Commits
Author SHA1 Message Date
penguin86 796f658fc5 Android 16 support, fix edge to edge 2026-09-02 22:58:48 +02:00
penguin86 4a760a9297 Gradle update 2026-09-01 22:42:05 +02:00
Daniele Verducci 230421065b Handle login errors 2026-07-16 11:25:11 +02:00
Daniele Verducci e22e748b28 Updated gradle 2026-07-16 11:17:44 +02:00
Daniele Verducci 339ee7629b Sensible default for geouri/gmaps setting 2026-07-16 11:16:05 +02:00
16 changed files with 84 additions and 7 deletions
+1
View File
@@ -1,6 +1,7 @@
*.iml
.gradle
/local.properties
/.idea
/.idea/caches
/.idea/libraries
/.idea/modules.xml
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="21" />
<bytecodeTargetLevel target="25" />
</component>
</project>
+1 -1
View File
@@ -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
View File
@@ -25,6 +25,8 @@
<queries>
<package android:name="com.nextcloud.client" />
<!-- To see if Google Maps is installed, as it needs a specific intent Uri) -->
<package android:name="com.google.android.apps.maps" />
</queries>
<application
@@ -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);
@@ -25,6 +25,7 @@ import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
@@ -101,7 +102,8 @@ public class LoginActivity extends NextcloudMapsStyledActivity {
@Override
public void onError(Exception ex) {
// TODO handle errors
Toast.makeText(LoginActivity.this, R.string.login_error, Toast.LENGTH_SHORT).show();
progress.setVisibility(View.GONE);
}
};
@@ -114,7 +116,7 @@ public class LoginActivity extends NextcloudMapsStyledActivity {
}
});
} catch (AccountImportCancelledException e) {
e.printStackTrace();
progress.setVisibility(View.GONE);
}
}
@@ -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)
@@ -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);
}
/**
@@ -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;
});
}
}
@@ -2,6 +2,7 @@ package it.danieleverducci.nextcloudmaps.utils;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import androidx.preference.PreferenceManager;
import it.danieleverducci.nextcloudmaps.activity.main.GeofavoriteAdapter;
@@ -50,7 +51,7 @@ public class SettingsManager {
public static boolean isUseGoogleMaps(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context)
.getBoolean(SETTING_USE_GOOGLE_MAPS, true);
.getBoolean(SETTING_USE_GOOGLE_MAPS, isGoogleMapsInstalled(context));
}
public static void setUseGoogleMaps(Context context, boolean value) {
@@ -65,4 +66,13 @@ public class SettingsManager {
.putFloat(SETTING_LAST_MAP_POSITION_ZOOM, (float)zoom)
.apply();
}
private static boolean isGoogleMapsInstalled(Context context) {
try {
context.getPackageManager().getApplicationInfo("com.google.android.apps.maps", 0);
return true;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
}
+1
View File
@@ -23,6 +23,7 @@
<!-- Login Activity -->
<string name="choose_account">Scegli account</string>
<string name="login_error">Si è verificato un errore durante la login</string>
<!-- Geofavorites list -->
<string name="new_geobookmark">Nuovo geosegnalibro</string>
+1
View File
@@ -22,6 +22,7 @@
<!-- Login Activity -->
<string name="choose_account">Choose account</string>
<string name="login_error">An error has occurred during the login</string>
<!-- Geofavorites list -->
<string name="new_geobookmark">New geofavorite</string>
+1 -1
View File
@@ -25,7 +25,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:9.2.1'
classpath 'com.android.tools.build:gradle:9.3.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
+1 -1
View File
@@ -1,6 +1,6 @@
#Sun Feb 20 08:50:37 CET 2022
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME