LoKi
Download
Go to the Releases to download the demo APK.
Screenshots
Including in your project
Gradle
Add below codes to your root build.gradle
file (not your module build.gradle file).
allprojects {
repositories {
mavenCentral()
}
}
And add a dependency code to your module's build.gradle
file.
dependencies {
implementation "io.github.joelromanpr:loki:1.0.0"
}
Usage
LoKi
Here is a basic example of implementing a LoKi
workflow.
Any activity that you wish to protect with a passcode must inherit a LokiActivity
class MainActivity : LokiActivity() {}
To prompt the user to setup their passcode for the first time call the launch
function within PasscodeSetupActivity
PasscodeSetupActivity.launch(this@MainActivity)
It is common to show the "enable passcode" state with a view such as a Switch
from your app Settings screen. Here is one way to approach it:
class MainActivity : LokiActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
findViewById<SwitchCompat>(R.id.enable_pin).apply {
this.isChecked = Loki.isEnabled(this@MainActivity)
this.setOnCheckedChangeListener { _, isChecked ->
when (isChecked) {
true -> PasscodeSetupActivity.launch(this@MainActivity)
else -> Loki.disable(this@MainActivity)
}
}
}
}
}
Loki Customization
You can customize certain aspects of LoKi by calling overwriteConfig
on the Loki
singleton object. You want to most likely do this from your Application class since it serves as the first entrypoint to it.
class DemoApp : Application() {
override fun onCreate() {
super.onCreate()
Loki.overwriteConfig(
LokiConfig(
appName = "LoKi Demo",
maxAttempts = 1,
passcodePinActiveCircleColor = android.R.color.holo_blue_dark
)
)
}
}
Internals
- Loki will place your app in a "disable" state if the user fails the passcode unlock workflow. Currently users must wait 1 minute before trying again
- LoKi's
PasscodeManager
is in charge of encoding (using a salt) the user's passcode - Behavior might change on newer versions. Make sure to reference docs.
π
Additional LoKi is a fast-track way of adding a passcode lock to your applications, you can also use it in production apps, however it was designed for quick experimentation and allow teams to satisfy a passcode lock need as quick as possible. Feel free to contribute and submit ideas on how it can be improved!
β€οΈ
Find this library useful? Support it by joining stargazers for this repository.
And follow me for my next creations!
License
Copyright 2021 joelromanpr (Joel R. Sosa)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.