diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/manage/RepeaterManager.kt b/mobile/src/main/java/be/mygod/vpnhotspot/manage/RepeaterManager.kt index 00050db7..3501a041 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/manage/RepeaterManager.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/manage/RepeaterManager.kt @@ -1,9 +1,11 @@ package be.mygod.vpnhotspot.manage +import android.Manifest import android.content.ComponentName import android.content.DialogInterface import android.content.Intent import android.content.ServiceConnection +import android.content.pm.PackageManager import android.net.wifi.WifiConfiguration import android.net.wifi.p2p.WifiP2pGroup import android.os.Bundle @@ -14,6 +16,7 @@ import android.view.WindowManager import android.widget.EditText import androidx.appcompat.app.AlertDialog import androidx.core.content.ContextCompat +import androidx.core.os.BuildCompat import androidx.databinding.BaseObservable import androidx.databinding.Bindable import androidx.lifecycle.ViewModel @@ -82,6 +85,12 @@ class RepeaterManager(private val parent: TetheringFragment) : Manager(), Servic when (binder?.service?.status) { RepeaterService.Status.IDLE -> { val context = parent.requireContext() + if (BuildCompat.isAtLeastQ() && context.checkSelfPermission( + Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + parent.requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), + TetheringFragment.START_REPEATER) + return + } ContextCompat.startForegroundService(context, Intent(context, RepeaterService::class.java)) } RepeaterService.Status.ACTIVE -> binder.shutdown() diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringFragment.kt index 9f859cd7..e2b22373 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringFragment.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringFragment.kt @@ -9,7 +9,10 @@ import android.content.pm.PackageManager import android.os.Build import android.os.Bundle import android.os.IBinder -import android.view.* +import android.view.LayoutInflater +import android.view.MenuItem +import android.view.View +import android.view.ViewGroup import androidx.core.content.ContextCompat import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment @@ -17,7 +20,10 @@ import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView -import be.mygod.vpnhotspot.* +import be.mygod.vpnhotspot.LocalOnlyHotspotService +import be.mygod.vpnhotspot.R +import be.mygod.vpnhotspot.RepeaterService +import be.mygod.vpnhotspot.TetheringService import be.mygod.vpnhotspot.databinding.FragmentTetheringBinding import be.mygod.vpnhotspot.net.TetherType import be.mygod.vpnhotspot.net.TetheringManager @@ -32,6 +38,7 @@ import java.net.SocketException class TetheringFragment : Fragment(), ServiceConnection, MenuItem.OnMenuItemClickListener { companion object { + const val START_REPEATER = 4 const val START_LOCAL_ONLY_HOTSPOT = 1 const val REPEATER_EDIT_CONFIGURATION = 2 const val REPEATER_WPS = 3 @@ -138,12 +145,19 @@ class TetheringFragment : Fragment(), ServiceConnection, MenuItem.OnMenuItemClic } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { - if (requestCode == START_LOCAL_ONLY_HOTSPOT) @TargetApi(26) { - if (grantResults.firstOrNull() == PackageManager.PERMISSION_GRANTED) { + when (requestCode) { + START_REPEATER -> if (grantResults.firstOrNull() == PackageManager.PERMISSION_GRANTED) @TargetApi(29) { val context = requireContext() - context.startForegroundService(Intent(context, LocalOnlyHotspotService::class.java)) + context.startForegroundService(Intent(context, RepeaterService::class.java)) } - } else super.onRequestPermissionsResult(requestCode, permissions, grantResults) + START_LOCAL_ONLY_HOTSPOT -> { + if (grantResults.firstOrNull() == PackageManager.PERMISSION_GRANTED) @TargetApi(26) { + val context = requireContext() + context.startForegroundService(Intent(context, LocalOnlyHotspotService::class.java)) + } + } + else -> super.onRequestPermissionsResult(requestCode, permissions, grantResults) + } } override fun onServiceConnected(name: ComponentName?, service: IBinder?) {