diff --git a/library/build.gradle b/library/build.gradle index 1780dd6f..40ebb3a6 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-SNAPSHOT' +version '0.10.7-SNAPSHOT' project.version = this.version @@ -120,9 +120,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.7-SNAPSHOT') { transitive = true; exclude group: 'com.mapbox.mapboxsdk', module: 'mapbox-android-sdk' exclude group: 'com.android.support', module: 'support-v4' 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/utils/build.gradle b/utils/build.gradle index fb65ccbc..42c11b75 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.7-SNAPSHOT' project.version = this.version