From 16e310793d132356f465d1d169dc9d2767006d43 Mon Sep 17 00:00:00 2001 From: Adeel Zafar Date: Sat, 6 Jul 2019 20:34:28 +0500 Subject: [PATCH] WRITE_Settings permission not given bug Handle if write settings permission is not given. --- .../kiwix/kiwixmobile/main/MainActivity.java | 27 ++++++++++++++----- .../wifi_hotspot/WifiHotspotManager.java | 17 ------------ 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/main/MainActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/main/MainActivity.java index ff543aa49..fee2603f9 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/main/MainActivity.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/main/MainActivity.java @@ -411,7 +411,6 @@ public class MainActivity extends BaseActivity implements WebViewCallback, drawerLayout.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); wifiHotspotManager = new WifiHotspotManager(this); - wifiHotspotManager.showWritePermissionSettings(); serviceIntent = new Intent(this, HotspotService.class); } @@ -955,7 +954,9 @@ public class MainActivity extends BaseActivity implements WebViewCallback, if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { toggleHotspot(); } else { - switchHotspot(); + if (showWritePermissionSettings()) { //request permission and if already granted switch hotspot. + switchHotspot(); + } } default: @@ -1085,14 +1086,13 @@ public class MainActivity extends BaseActivity implements WebViewCallback, if (wifiHotspotManager.isWifiApEnabled()) { startService(ACTION_TURN_OFF_BEFORE_O); } else { - //Check if user's hotspot is enabled if (isMobileDataEnabled(this)) { mobileDataDialog(); } else { startService(ACTION_TURN_ON_BEFORE_O); } - } + } } public static void startHotspotDetails() { @@ -1154,6 +1154,22 @@ public class MainActivity extends BaseActivity implements WebViewCallback, } } + //To get write permission settings, we use this method. + private boolean showWritePermissionSettings() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M + && Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { + if (!Settings.System.canWrite(this)) { + Log.v("DANG", " " + !Settings.System.canWrite(this)); + Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS); + intent.setData(Uri.parse("package:" + this.getPackageName())); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + this.startActivity(intent); + return false; + } + } + return true; //Permission already given + } + @SuppressWarnings("SameReturnValue") @OnLongClick(R.id.bottom_toolbar_bookmark) boolean goToBookmarks() { @@ -1589,8 +1605,6 @@ public class MainActivity extends BaseActivity implements WebViewCallback, } } updateWidgets(this); - - wifiHotspotManager.showWritePermissionSettings(); } private void updateBottomToolbarVisibility() { @@ -1802,7 +1816,6 @@ public class MainActivity extends BaseActivity implements WebViewCallback, } } return; - //Checking the result code for LocationSettings resolution case 101: final LocationSettingsStates states = LocationSettingsStates.fromIntent(data); diff --git a/app/src/main/java/org/kiwix/kiwixmobile/wifi_hotspot/WifiHotspotManager.java b/app/src/main/java/org/kiwix/kiwixmobile/wifi_hotspot/WifiHotspotManager.java index 9aeade174..bc51f6203 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/wifi_hotspot/WifiHotspotManager.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/wifi_hotspot/WifiHotspotManager.java @@ -1,13 +1,10 @@ package org.kiwix.kiwixmobile.wifi_hotspot; import android.content.Context; -import android.content.Intent; -import android.net.Uri; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; import android.os.Build; import android.os.Handler; -import android.provider.Settings; import android.util.Log; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AlertDialog; @@ -34,20 +31,6 @@ public class WifiHotspotManager { wifiManager = (WifiManager) this.context.getSystemService(Context.WIFI_SERVICE); } - //To get write permission settings, we use this method. - public void showWritePermissionSettings() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M - && Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { - if (!Settings.System.canWrite(this.context)) { - Log.v("DANG", " " + !Settings.System.canWrite(this.context)); - Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS); - intent.setData(Uri.parse("package:" + this.context.getPackageName())); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - this.context.startActivity(intent); - } - } - } - // This method enables/disables the wifi access point // It is used for API<26 public boolean setWifiEnabled(WifiConfiguration wifiConfig, boolean enabled) {