diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/manage/LocalOnlyHotspotManager.kt b/mobile/src/main/java/be/mygod/vpnhotspot/manage/LocalOnlyHotspotManager.kt
index 07148997..b35fe453 100644
--- a/mobile/src/main/java/be/mygod/vpnhotspot/manage/LocalOnlyHotspotManager.kt
+++ b/mobile/src/main/java/be/mygod/vpnhotspot/manage/LocalOnlyHotspotManager.kt
@@ -2,13 +2,16 @@ package be.mygod.vpnhotspot.manage
import android.Manifest
import android.annotation.TargetApi
+import android.content.ActivityNotFoundException
import android.content.ComponentName
import android.content.Intent
import android.content.ServiceConnection
import android.content.pm.PackageManager
import android.os.IBinder
+import android.provider.Settings
import android.support.v7.widget.RecyclerView
import android.view.View
+import android.widget.Toast
import be.mygod.vpnhotspot.LocalOnlyHotspotService
import be.mygod.vpnhotspot.R
import be.mygod.vpnhotspot.databinding.ListitemInterfaceBinding
@@ -31,13 +34,28 @@ class LocalOnlyHotspotManager(private val parent: TetheringFragment) : Manager()
val binder = manager.binder
if (binder?.iface != null) binder.stop() else {
val context = manager.parent.requireContext()
- if (context.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) ==
+ if (context.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
- context.startForegroundService(Intent(context, LocalOnlyHotspotService::class.java))
- } else {
manager.parent.requestPermissions(arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION),
TetheringFragment.START_LOCAL_ONLY_HOTSPOT)
+ return
}
+ /**
+ * LOH also requires location to be turned on. Source:
+ * https://android.googlesource.com/platform/frameworks/opt/net/wifi/+/53e0284/service/java/com/android/server/wifi/WifiServiceImpl.java#1204
+ * https://android.googlesource.com/platform/frameworks/opt/net/wifi/+/53e0284/service/java/com/android/server/wifi/WifiSettingsStore.java#228
+ */
+ if (Settings.Secure.getInt(view.context.contentResolver, Settings.Secure.LOCATION_MODE,
+ Settings.Secure.LOCATION_MODE_OFF) == Settings.Secure.LOCATION_MODE_OFF) {
+ Toast.makeText(view.context, R.string.tethering_temp_hotspot_location, Toast.LENGTH_LONG).show()
+ try {
+ view.context.startActivity(Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS))
+ } catch (exc: ActivityNotFoundException) {
+ exc.printStackTrace()
+ }
+ return
+ }
+ context.startForegroundService(Intent(context, LocalOnlyHotspotService::class.java))
}
}
}
diff --git a/mobile/src/main/res/values-zh-rCN/strings.xml b/mobile/src/main/res/values-zh-rCN/strings.xml
index 301cad90..2e0299ed 100644
--- a/mobile/src/main/res/values-zh-rCN/strings.xml
+++ b/mobile/src/main/res/values-zh-rCN/strings.xml
@@ -29,6 +29,7 @@
未添加服务请求
临时 WLAN 热点
+ 使用临时热点需要打开位置服务。
打开热点失败 (原因:%s)
无频段
通用错误
diff --git a/mobile/src/main/res/values/strings.xml b/mobile/src/main/res/values/strings.xml
index 403e3f0b..5645e6ef 100644
--- a/mobile/src/main/res/values/strings.xml
+++ b/mobile/src/main/res/values/strings.xml
@@ -40,6 +40,7 @@
no service requests added
Temporary Wi\u2011Fi hotspot
+ Temporary hotspot requires location to be turned on.
Failed to start hotspot (reason: %s)
no channel
generic error