From 8ec7eac2887baf19623b442477f2d0722bed1729 Mon Sep 17 00:00:00 2001 From: OliE Date: Sun, 11 Feb 2018 14:21:00 +0100 Subject: [PATCH] HACK to call RequestPermissionResult(...) in PreferenceFragment otherwise API level > 23 is required --- .../health/openscale/gui/MainActivity.java | 1 + .../gui/activities/SettingsActivity.java | 29 +++++++++++++++++++ .../gui/preferences/BackupPreferences.java | 5 +--- .../gui/preferences/BluetoothPreferences.java | 5 ++-- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java index 3a0f36a0..3b985c90 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java @@ -473,6 +473,7 @@ public class MainActivity extends AppCompatActivity { break; } + currentFragment.onRequestPermissionsResult(requestCode, permissions, grantResults); super.onRequestPermissionsResult(requestCode, permissions, grantResults); } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/SettingsActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/activities/SettingsActivity.java index 7b523b89..43d7a05b 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/activities/SettingsActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/activities/SettingsActivity.java @@ -15,6 +15,7 @@ */ package com.health.openscale.gui.activities; +import android.app.Fragment; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.os.Bundle; @@ -22,6 +23,9 @@ import android.preference.PreferenceActivity; import android.preference.PreferenceManager; import com.health.openscale.R; +import com.health.openscale.gui.preferences.BackupPreferences; +import com.health.openscale.gui.preferences.BluetoothPreferences; +import com.health.openscale.gui.utils.PermissionHelper; import java.util.ArrayList; import java.util.List; @@ -29,6 +33,7 @@ import java.util.List; public class SettingsActivity extends PreferenceActivity { public static String EXTRA_TINT_COLOR = "tintColor"; private static List fragments = new ArrayList(); + private Fragment currentFragment; @Override public void onCreate(Bundle savedInstanceState) { @@ -60,4 +65,28 @@ public class SettingsActivity extends PreferenceActivity { protected boolean isValidFragment(String fragmentName) { return fragments.contains(fragmentName); } + + @Override + public void onAttachFragment(Fragment fragment) { + currentFragment = fragment; + super.onAttachFragment(fragment); + } + + @Override + public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { + // HACK to call RequestPermissionResult(...) in PreferenceFragment otherwise API level > 23 is required + switch(requestCode) { + case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION: + BluetoothPreferences bluetoothPreferences = (BluetoothPreferences)currentFragment; + bluetoothPreferences.onMyOwnRequestPermissionsResult(requestCode, permissions, grantResults); + break; + case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_READ_STORAGE: + case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_WRITE_STORAGE: + BackupPreferences backupPreferences = (BackupPreferences)currentFragment; + backupPreferences.onMyOwnRequestPermissionsResult(requestCode, permissions, grantResults); + break; + } + + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/BackupPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BackupPreferences.java index a9166538..f75693e8 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/preferences/BackupPreferences.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BackupPreferences.java @@ -218,8 +218,7 @@ public class BackupPreferences extends PreferenceFragment { return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); } - @Override - public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { + public void onMyOwnRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_READ_STORAGE: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { @@ -236,7 +235,5 @@ public class BackupPreferences extends PreferenceFragment { } break; } - - super.onRequestPermissionsResult(requestCode, permissions, grantResults); } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java index 26acfa8b..25f60a7b 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java @@ -245,8 +245,7 @@ public class BluetoothPreferences extends PreferenceFragment implements SharedPr } } - @Override - public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { + public void onMyOwnRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { @@ -254,7 +253,7 @@ public class BluetoothPreferences extends PreferenceFragment implements SharedPr } else { Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show(); } - return; + break; } } }