diff --git a/configs.gradle b/configs.gradle
index ab9f684c..a0af1b81 100644
--- a/configs.gradle
+++ b/configs.gradle
@@ -110,7 +110,6 @@ ext {
mapboxAnnotationPluginVersion = "0.9.0"
mapboxSdkVersion = "9.7.1"
mapboxSdkTurfVersion = "7.2.0"
- robolectricShadowsMultidexVersion = "4.13"
robolectricVersion = "4.13"
supportVersion = "1.0.0"
volleyVersion = "1.2.1"
@@ -123,13 +122,12 @@ ext {
mapboxSDKTurf = "com.mapbox.mapboxsdk:mapbox-sdk-turf:$mapboxSdkTurfVersion"
mapboxAnnotationPlugin = "com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:$mapboxAnnotationPluginVersion"
robolectric = "org.robolectric:robolectric:$robolectricVersion"
- robolectricShadowsMultidex = "org.robolectric:shadows-multidex:$robolectricShadowsMultidexVersion"
}
ext.mapboxDependencies = { instance, configuration ->
configuration.implementation("com.mapbox.maps:android:$mapboxSdkVersion") {
- transitive = true;
+ transitive = true
exclude group: 'com.android.support', module: 'support-v4'
exclude group: 'com.android.support', module: 'support-annotations'
exclude group: 'com.android.support', module: 'support-fragment'
diff --git a/library/build.gradle b/library/build.gradle
index 1b842ea4..c628ddf5 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -13,7 +13,7 @@ buildscript {
apply plugin: 'realm-android'
apply plugin: 'maven-publish'
-version '0.10.6-2-SNAPSHOT'
+version '0.10.8-SNAPSHOT'
project.version = this.version
@@ -42,7 +42,6 @@ android {
versionCode 1
versionName this.version
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
- multiDexEnabled true
}
buildTypes {
@@ -57,11 +56,11 @@ android {
properties.containsKey("mapbox.sdk.token")) {
buildConfigField "String", "MAPBOX_SDK_ACCESS_TOKEN", "\"" + localProperties["mapbox.sdk.token"] + "\""
} else {
- println("One of the required config variables is not set in your local.properties");
+ println("One of the required config variables is not set in your local.properties")
buildConfigField "String", "MAPBOX_SDK_ACCESS_TOKEN", "\"sample_key\""
}
} else {
- println("local.properties does not exist");
+ println("local.properties does not exist")
buildConfigField "String", "MAPBOX_SDK_ACCESS_TOKEN", "\"sample_key\""
}
}
@@ -77,11 +76,11 @@ android {
properties.containsKey("mapbox.sdk.token")) {
buildConfigField "String", "MAPBOX_SDK_ACCESS_TOKEN", "\"" + localProperties["mapbox.sdk.token"] + "\""
} else {
- println("One of the required config variables is not set in your local.properties");
+ println("One of the required config variables is not set in your local.properties")
buildConfigField "String", "MAPBOX_SDK_ACCESS_TOKEN", "\"sample_key\""
}
} else {
- println("local.properties does not exist");
+ println("local.properties does not exist")
buildConfigField "String", "MAPBOX_SDK_ACCESS_TOKEN", "\"sample_key\""
}
@@ -107,7 +106,7 @@ android {
dependencies { configuration ->
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation (mapboxSDK) {
- transitive = true;
+ transitive = true
exclude group: 'com.android.support', module: 'support-v4'
exclude group: 'com.android.support', module: 'support-annotations'
exclude group: 'com.android.support', module: 'support-fragment'
@@ -120,9 +119,9 @@ dependencies { configuration ->
implementation mapboxAnnotationPlugin
// Comment the line below when creating releases - The line is for development of the library & utils
- //implementation (project(":utils")) {
+ implementation (project(":utils")) {
// Uncomment the line below when creating releases
- implementation('io.ona.kujaku:utils:0.10.6-SNAPSHOT') {
+ implementation('io.ona.kujaku:utils:0.10.8-SNAPSHOT') {
transitive = true
exclude group: 'com.mapbox.mapboxsdk', module: 'mapbox-android-sdk'
exclude group: 'com.android.support', module: 'support-v4'
@@ -134,8 +133,6 @@ dependencies { configuration ->
implementation 'com.jakewharton.threetenabp:threetenabp:1.1.1'
implementation 'com.jakewharton.timber:timber:5.0.1'
- implementation 'androidx.multidex:multidex:2.0.1'
-
customDependencies(this, configuration)
appPermissionsDependencies(configuration)
infoWindowDependencies(this, configuration)
@@ -147,7 +144,6 @@ private static void testDependencies(instance, configuration) {
configuration.testImplementation instance.junit
configuration.testImplementation instance.robolectric
- configuration.testImplementation instance.robolectricShadowsMultidex
configuration.testImplementation 'org.mockito:mockito-inline:5.2.0'
diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml
index b069283b..9ab78274 100644
--- a/library/src/main/AndroidManifest.xml
+++ b/library/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
-
+
diff --git a/library/src/main/java/io/ona/kujaku/helpers/PermissionsHelper.java b/library/src/main/java/io/ona/kujaku/helpers/PermissionsHelper.java
index 2ba9daa5..021e0091 100644
--- a/library/src/main/java/io/ona/kujaku/helpers/PermissionsHelper.java
+++ b/library/src/main/java/io/ona/kujaku/helpers/PermissionsHelper.java
@@ -9,23 +9,33 @@
import com.karumi.dexter.Dexter;
import com.karumi.dexter.listener.multi.MultiplePermissionsListener;
+import java.util.ArrayList;
+import java.util.List;
+
import io.ona.kujaku.utils.KujakuMultiplePermissionListener;
+import timber.log.Timber;
public class PermissionsHelper {
public static void checkPermissions(String TAG, Context context) {
if (context instanceof Activity) {
+ List permissions = new ArrayList<>();
+ permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
+
+ if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S) {
+ permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
+ }
final Activity activity = (Activity) context;
MultiplePermissionsListener dialogMultiplePermissionListener = new KujakuMultiplePermissionListener(activity);
Dexter.withActivity(activity)
- .withPermissions(Manifest.permission.ACCESS_FINE_LOCATION, (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) ? Manifest.permission.MANAGE_EXTERNAL_STORAGE : Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ .withPermissions(permissions)
.withListener(dialogMultiplePermissionListener)
.check();
} else {
- Log.wtf(TAG, "KujakuMapView was not started in an activity!! This is very bad or it is being used in tests. We are going to ignore the permissions check! Good luck");
+ Timber.tag(TAG).wtf("KujakuMapView was not started in an activity!! This is very bad or it is being used in tests. We are going to ignore the permissions check! Good luck");
}
}
}
diff --git a/library/src/test/java/io/ona/kujaku/helpers/PermissionsHelperTest.java b/library/src/test/java/io/ona/kujaku/helpers/PermissionsHelperTest.java
new file mode 100644
index 00000000..b7f2483d
--- /dev/null
+++ b/library/src/test/java/io/ona/kujaku/helpers/PermissionsHelperTest.java
@@ -0,0 +1,56 @@
+package io.ona.kujaku.helpers;
+
+import static org.junit.Assert.assertFalse;
+
+import android.app.Activity;
+import android.content.Context;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+import com.karumi.dexter.MultiplePermissionsReport;
+import io.ona.kujaku.utils.KujakuMultiplePermissionListener;
+
+@RunWith(RobolectricTestRunner.class)
+public class PermissionsHelperTest {
+
+ @Mock
+ Context mockContext;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.openMocks(this);
+ // Use a real context
+ mockContext = Robolectric.setupActivity(Activity.class).getApplicationContext();
+ }
+
+ @Test
+ public void testOnPermissionsCheckedWhenAnyPermissionPermanentlyDenied() {
+ MultiplePermissionsReport report = Mockito.mock(MultiplePermissionsReport.class);
+ Mockito.when(report.isAnyPermissionPermanentlyDenied()).thenReturn(true);
+ Mockito.when(report.areAllPermissionsGranted()).thenReturn(false);
+ KujakuMultiplePermissionListener listener = new KujakuMultiplePermissionListener(mockContext);
+ listener.onPermissionsChecked(report);
+
+ // Check that the dialog was created with the expected properties
+ Mockito.verify(report).isAnyPermissionPermanentlyDenied();
+ }
+
+ @Test
+ public void testOnPermissionsCheckedWhenAnyPermissionNotPermanentlyDenied() {
+ MultiplePermissionsReport report = Mockito.mock(MultiplePermissionsReport.class);
+ Mockito.when(report.isAnyPermissionPermanentlyDenied()).thenReturn(false);
+ Mockito.when(report.areAllPermissionsGranted()).thenReturn(false);
+ KujakuMultiplePermissionListener listener = new KujakuMultiplePermissionListener(mockContext);
+ listener.onPermissionsChecked(report);
+
+ boolean result = report.isAnyPermissionPermanentlyDenied();
+
+ // Use the result in your assertions or further logic
+ assertFalse(result);
+ }
+}
diff --git a/sample/build.gradle b/sample/build.gradle
index 605c46ae..5cd408b7 100644
--- a/sample/build.gradle
+++ b/sample/build.gradle
@@ -28,7 +28,6 @@ android {
versionCode getMasterCommitCount()
versionName getVersionName()
- multiDexEnabled true
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}
@@ -95,8 +94,6 @@ dependencies { configuration ->
exclude group: "com.android.support", module: "appcompat-v7"
}
- implementation 'androidx.multidex:multidex:2.0.1'
-
testImplementation junit
testImplementation robolectric
}
@@ -111,7 +108,7 @@ private static void libraryModuleDevelopment(instance, configuration) {
}
configuration.implementation(instance.project(":utils")) {
- transitive = true;
+ transitive = true
exclude group: 'com.mapbox.mapboxsdk', module: 'mapbox-android-sdk'
exclude group: 'com.android.support', module: 'support-v4'
exclude group: 'com.android.support', module: 'appcompat-v7'
@@ -119,7 +116,7 @@ private static void libraryModuleDevelopment(instance, configuration) {
}
configuration.implementation(instance.mapboxSDK) {
- transitive = true;
+ transitive = true
exclude group: 'com.android.support', module: 'support-v4'
exclude group: 'com.android.support', module: 'support-annotations'
exclude group: 'com.android.support', module: 'support-fragment'
diff --git a/sample/src/main/java/io/ona/kujaku/sample/MyApplication.java b/sample/src/main/java/io/ona/kujaku/sample/MyApplication.java
index 7260838f..e9703d27 100644
--- a/sample/src/main/java/io/ona/kujaku/sample/MyApplication.java
+++ b/sample/src/main/java/io/ona/kujaku/sample/MyApplication.java
@@ -1,6 +1,5 @@
package io.ona.kujaku.sample;
-import androidx.multidex.MultiDexApplication;
import io.ona.kujaku.KujakuLibrary;
import io.ona.kujaku.sample.repository.KujakuRepository;
import io.ona.kujaku.sample.repository.PointsRepository;
@@ -8,7 +7,9 @@
import static io.ona.kujaku.sample.util.Constants.DATABASE_NAME;
-public class MyApplication extends MultiDexApplication {
+import android.app.Application;
+
+public class MyApplication extends Application {
private static final String TAG = MyApplication.class.getName();
diff --git a/utils/build.gradle b/utils/build.gradle
index fb65ccbc..f7c56d47 100644
--- a/utils/build.gradle
+++ b/utils/build.gradle
@@ -2,7 +2,7 @@ apply plugin: 'com.android.library'
apply plugin: 'maven-publish'
apply plugin: 'jacoco'
-version '0.10.6-SNAPSHOT'
+version '0.10.8-SNAPSHOT'
project.version = this.version