feat: removing the QR code on visibility hint no longer visible

This commit is contained in:
Harris 2021-06-16 14:25:33 +10:00
parent 71ffaaabc2
commit 99fbf26907

View File

@ -3,18 +3,36 @@ package org.thoughtcrime.securesms.loki.fragments
import android.Manifest import android.Manifest
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.core.content.ContextCompat
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.content.ContextCompat
import androidx.fragment.app.Fragment
import com.tbruyelle.rxpermissions2.RxPermissions import com.tbruyelle.rxpermissions2.RxPermissions
import network.loki.messenger.R import network.loki.messenger.R
import org.thoughtcrime.securesms.qr.ScanListener import org.thoughtcrime.securesms.qr.ScanListener
class ScanQRCodeWrapperFragment : Fragment(), ScanQRCodePlaceholderFragmentDelegate, ScanListener { class ScanQRCodeWrapperFragment : Fragment(), ScanQRCodePlaceholderFragmentDelegate, ScanListener {
companion object {
const val FRAGMENT_TAG = "ScanQRCodeWrapperFragment_FRAGMENT_TAG"
}
var delegate: ScanQRCodeWrapperFragmentDelegate? = null var delegate: ScanQRCodeWrapperFragmentDelegate? = null
var message: CharSequence = "" var message: CharSequence = ""
var enabled: Boolean = true
set(value) {
val shouldUpdate = field != value // update if value changes (view appears or disappears)
field = value
if (shouldUpdate) {
update()
}
}
override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
enabled = isVisibleToUser
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_scan_qr_code_wrapper, container, false) return inflater.inflate(R.layout.fragment_scan_qr_code_wrapper, container, false)
@ -26,7 +44,17 @@ class ScanQRCodeWrapperFragment : Fragment(), ScanQRCodePlaceholderFragmentDeleg
} }
private fun update() { private fun update() {
if (!this.isAdded) return
val fragment: Fragment val fragment: Fragment
if (!enabled) {
val manager = childFragmentManager
manager.findFragmentByTag(FRAGMENT_TAG)?.let { existingFragment ->
// remove existing camera fragment (if switching back to other page)
manager.beginTransaction().remove(existingFragment).commit()
}
return
}
if (ContextCompat.checkSelfPermission(requireActivity(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { if (ContextCompat.checkSelfPermission(requireActivity(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
val scanQRCodeFragment = ScanQRCodeFragment() val scanQRCodeFragment = ScanQRCodeFragment()
scanQRCodeFragment.scanListener = this scanQRCodeFragment.scanListener = this
@ -38,7 +66,7 @@ class ScanQRCodeWrapperFragment : Fragment(), ScanQRCodePlaceholderFragmentDeleg
fragment = scanQRCodePlaceholderFragment fragment = scanQRCodePlaceholderFragment
} }
val transaction = childFragmentManager.beginTransaction() val transaction = childFragmentManager.beginTransaction()
transaction.replace(R.id.fragmentContainer, fragment) transaction.replace(R.id.fragmentContainer, fragment, FRAGMENT_TAG)
transaction.commit() transaction.commit()
} }
@ -59,6 +87,5 @@ class ScanQRCodeWrapperFragment : Fragment(), ScanQRCodePlaceholderFragmentDeleg
} }
interface ScanQRCodeWrapperFragmentDelegate { interface ScanQRCodeWrapperFragmentDelegate {
fun handleQRCodeScanned(string: String) fun handleQRCodeScanned(string: String)
} }