Skip to content

Commit ee79d1b

Browse files
muhomorrthestinger
authored andcommitted
add lockscreen support to QR code scanner shortcut activity
1 parent ec9b6c7 commit ee79d1b

File tree

5 files changed

+37
-7
lines changed

5 files changed

+37
-7
lines changed

app/src/main/AndroidManifest.xml

+1
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@
189189
<activity
190190
android:name=".ui.activities.QrTile"
191191
android:exported="true"
192+
android:showWhenLocked="true"
192193
android:screenOrientation="nosensor"
193194
android:excludeFromRecents="true"/>
194195

app/src/main/java/app/grapheneos/camera/CamConfig.kt

+7-5
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ import androidx.camera.core.CameraSelector
2525
import androidx.camera.core.ImageAnalysis
2626
import androidx.camera.core.ImageCapture
2727
import androidx.camera.core.Preview
28+
import androidx.camera.core.TorchState
29+
import androidx.camera.core.UseCaseGroup
2830
import androidx.camera.core.resolutionselector.AspectRatioStrategy
2931
import androidx.camera.core.resolutionselector.ResolutionSelector
3032
import androidx.camera.core.resolutionselector.ResolutionStrategy
31-
import androidx.camera.core.TorchState
32-
import androidx.camera.core.UseCaseGroup
3333
import androidx.camera.extensions.ExtensionMode
3434
import androidx.camera.extensions.ExtensionsManager
3535
import androidx.camera.lifecycle.ProcessCameraProvider
@@ -44,7 +44,6 @@ import app.grapheneos.camera.ktx.markAs4by3Layout
4444
import app.grapheneos.camera.ui.activities.CaptureActivity
4545
import app.grapheneos.camera.ui.activities.MainActivity
4646
import app.grapheneos.camera.ui.activities.MoreSettings
47-
import app.grapheneos.camera.ui.activities.QrTile
4847
import app.grapheneos.camera.ui.activities.SecureActivity
4948
import app.grapheneos.camera.ui.activities.SecureMainActivity
5049
import app.grapheneos.camera.ui.activities.VideoCaptureActivity
@@ -274,7 +273,6 @@ class CamConfig(private val mActivity: MainActivity) {
274273
}
275274
}
276275

277-
private val defaultMode = if (mActivity is QrTile) CameraMode.QR_SCAN else DEFAULT_CAMERA_MODE
278276
private var currentMode: CameraMode = DEFAULT_CAMERA_MODE
279277

280278
var aspectRatio: Int
@@ -1266,6 +1264,10 @@ class CamConfig(private val mActivity: MainActivity) {
12661264

12671265
@SuppressLint("ClickableViewAccessibility")
12681266
private fun loadTabs() {
1267+
if (!mActivity.shouldShowCameraModeTabs()) {
1268+
return
1269+
}
1270+
12691271
val tabLayout = mActivity.tabLayout
12701272
val availableModes = availableModes()
12711273

@@ -1289,7 +1291,7 @@ class CamConfig(private val mActivity: MainActivity) {
12891291
}
12901292
tab.tag = mode
12911293

1292-
tabLayout.addTab(tab, mode == defaultMode)
1294+
tabLayout.addTab(tab, mode == DEFAULT_CAMERA_MODE)
12931295
}
12941296
}
12951297
}

app/src/main/java/app/grapheneos/camera/ui/activities/MainActivity.kt

+2
Original file line numberDiff line numberDiff line change
@@ -1788,4 +1788,6 @@ open class MainActivity : AppCompatActivity(),
17881788
}
17891789
}
17901790
}
1791+
1792+
open fun shouldShowCameraModeTabs() = true
17911793
}
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,37 @@
11
package app.grapheneos.camera.ui.activities
22

3+
import android.app.KeyguardManager
4+
import android.content.Intent
35
import android.os.Bundle
6+
import androidx.core.content.getSystemService
47
import app.grapheneos.camera.CameraMode
58

6-
class QrTile : MainActivity() {
9+
// Requires integration into the OS, see config_defaultQrCodeComponent in frameworks/base.
10+
//
11+
// SystemUI links this activity via a quick tile or a lockscreen shortcut.
12+
// The activity name is historical, changing it would break the SystemUI integration for users on
13+
// older OS versions.
14+
class QrTile : SecureMainActivity() {
715

816
override fun onCreate(savedInstanceState: Bundle?) {
917
super.onCreate(savedInstanceState)
1018
camConfig.switchMode(CameraMode.QR_SCAN)
1119
}
20+
21+
override fun shouldShowCameraModeTabs() = false
22+
23+
override fun startActivity(intent: Intent, options: Bundle?) {
24+
val keyguardManager = getSystemService<KeyguardManager>()!!
25+
26+
if (keyguardManager.isKeyguardLocked) {
27+
val cb = object : KeyguardManager.KeyguardDismissCallback() {
28+
override fun onDismissSucceeded() {
29+
super@QrTile.startActivity(intent, options);
30+
}
31+
}
32+
keyguardManager.requestDismissKeyguard(this, cb)
33+
} else {
34+
super.startActivity(intent, options)
35+
}
36+
}
1237
}

app/src/main/java/app/grapheneos/camera/ui/activities/SecureMainActivity.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import app.grapheneos.camera.CapturedItem
55
import app.grapheneos.camera.util.EphemeralSharedPrefsNamespace
66
import app.grapheneos.camera.util.getPrefs
77

8-
class SecureMainActivity : MainActivity(), SecureActivity {
8+
open class SecureMainActivity : MainActivity(), SecureActivity {
99
val capturedItems = ArrayList<CapturedItem>()
1010
val ephemeralPrefsNamespace = EphemeralSharedPrefsNamespace()
1111

0 commit comments

Comments
 (0)