[UI/Settings] Add requesting camera permissions in web push fragment.

This commit is contained in:
Kuba Szczodrzyński 2021-03-25 17:47:02 +01:00
parent dd6e536f88
commit d9b91d6de8
2 changed files with 6 additions and 14 deletions

View File

@ -4,15 +4,11 @@
package pl.szczodrzynski.edziennik.ui.modules.webpush package pl.szczodrzynski.edziennik.ui.modules.webpush
import android.Manifest
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.pm.PackageManager
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@ -25,7 +21,6 @@ import pl.szczodrzynski.edziennik.data.api.szkolny.response.WebPushResponse
import pl.szczodrzynski.edziennik.databinding.WebPushFragmentBinding import pl.szczodrzynski.edziennik.databinding.WebPushFragmentBinding
import pl.szczodrzynski.edziennik.ui.dialogs.QrScannerDialog import pl.szczodrzynski.edziennik.ui.dialogs.QrScannerDialog
import pl.szczodrzynski.edziennik.utils.SimpleDividerItemDecoration import pl.szczodrzynski.edziennik.utils.SimpleDividerItemDecoration
import pl.szczodrzynski.edziennik.utils.Themes
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
class WebPushFragment : Fragment(), CoroutineScope { class WebPushFragment : Fragment(), CoroutineScope {
@ -46,13 +41,13 @@ class WebPushFragment : Fragment(), CoroutineScope {
SzkolnyApi(app) SzkolnyApi(app)
} }
private val manager
get() = app.permissionManager
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
activity = (getActivity() as MainActivity?) ?: return null activity = (getActivity() as MainActivity?) ?: return null
context ?: return null context ?: return null
app = activity.application as App app = activity.application as App
context!!.theme.applyStyle(Themes.appTheme, true)
if (app.profile == null)
return inflater.inflate(R.layout.fragment_loading, container, false)
// activity, context and profile is valid // activity, context and profile is valid
b = WebPushFragmentBinding.inflate(inflater) b = WebPushFragmentBinding.inflate(inflater)
return b.root return b.root
@ -60,19 +55,15 @@ class WebPushFragment : Fragment(), CoroutineScope {
@SuppressLint("DefaultLocale") @SuppressLint("DefaultLocale")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// TODO check if app, activity, b can be null if (!isAdded)
if (app.profile == null || !isAdded)
return return
b.scanQrCode.onClick { b.scanQrCode.onClick {
val result = ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA) manager.requestCameraPermission(activity, R.string.permissions_qr_scanner) {
if (result == PackageManager.PERMISSION_GRANTED) {
QrScannerDialog(activity, { QrScannerDialog(activity, {
b.tokenEditText.setText(it.crc32().toString(36).toUpperCase()) b.tokenEditText.setText(it.crc32().toString(36).toUpperCase())
pairBrowser(browserId = it) pairBrowser(browserId = it)
}) })
} else {
ActivityCompat.requestPermissions(activity, arrayOf(Manifest.permission.CAMERA), 1)
} }
} }

View File

@ -1398,4 +1398,5 @@
<string name="profile_config_name_hint">Nazwa profilu</string> <string name="profile_config_name_hint">Nazwa profilu</string>
<string name="profile_config_sync_enabled">Synchronizuj ten profil</string> <string name="profile_config_sync_enabled">Synchronizuj ten profil</string>
<string name="profile_config_logout">Wyloguj się</string> <string name="profile_config_logout">Wyloguj się</string>
<string name="permissions_qr_scanner">Aby móc zeskanować kod QR musisz przyznać uprawnienia dostępu do kamery.\n\nKliknij OK, aby przyznać uprawnienia.</string>
</resources> </resources>