Skip to content
This repository has been archived by the owner on Jan 7, 2023. It is now read-only.
/ LoKi Public archive

πŸ”’ Add a passcode lock feature to your android applications hassle-free.

License

Notifications You must be signed in to change notification settings

joelromanpr/LoKi

Repository files navigation

LoKi


πŸ”’ Add a passcode lock feature to your android applications hassle-free.

License API Build Status

Download

Go to the Releases to download the demo APK.

Screenshots

Including in your project

Maven Central

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.