Popularity
0.4
Stable
Activity
0.0
Declining
1
1
1

Description

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

Programming language: Kotlin
License: Apache License 2.0
Tags: Kotlin     Android     Security     Android-library     Opensource     Joelromanpr    

LoKi alternatives and similar packages

Based on the "Kotlin" category.
Alternatively, view LoKi alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of LoKi or a related project?

Add another 'Kotlin' Package

README

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

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? :heart:

Support it by joining stargazers for this repository. :star: 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.


*Note that all licence references and agreements mentioned in the LoKi README section above are relevant to that project's source code only.