All Projects → MarcinMoskala → Preferenceholder

MarcinMoskala / Preferenceholder

Licence: apache-2.0
SharedPreference usage made fun in Kotlin

Programming Languages

kotlin
9241 projects

Projects that are alternatives of or similar to Preferenceholder

Keeper
A Gradle plugin that infers Proguard/R8 keep rules for androidTest sources.
Stars: ✭ 135 (-8.78%)
Mutual labels:  gradle
Api Generator
Api Generator是一款可以自动解析Controller类抽取REST接口信息并自动上传YApi的IDEA插件。YApi好伴侣,从此维护文档再也不是事儿了!
Stars: ✭ 139 (-6.08%)
Mutual labels:  preferences
Gradle Aem Plugin
Swiss army knife for Adobe Experience Manager related automation. Environment setup & incremental AEM application build which takes seconds, not minutes.
Stars: ✭ 145 (-2.03%)
Mutual labels:  gradle
Nice Knowledge System
📚不积跬步无以至千里,每天进步一点点,Passion,Self-regulation,Love and Share
Stars: ✭ 137 (-7.43%)
Mutual labels:  gradle
Tyrian
Full-featured TypeScript on JVM
Stars: ✭ 138 (-6.76%)
Mutual labels:  gradle
Segmentedcontrol
Android SegmentedControl + multi row support
Stars: ✭ 143 (-3.38%)
Mutual labels:  gradle
Publiccms
现代化java cms,由天津黑核科技有限公司开发,轻松支撑千万数据、千万PV;支持静态化,服务器端包含; 目前已经拥有全球0.0002%的用户,语言支持中、繁、日、英;是一个已走向海外的成熟CMS产品
Stars: ✭ 1,750 (+1082.43%)
Mutual labels:  gradle
Google Java Format Gradle Plugin
Stars: ✭ 147 (-0.68%)
Mutual labels:  gradle
Java Ddd Skeleton
♨️ DDD in Java skeleton & examples. Course:
Stars: ✭ 140 (-5.41%)
Mutual labels:  gradle
Image Comparison
Published on Maven Central and jCenter Java Library that compares 2 images with the same sizes and shows the differences visually by drawing rectangles. Some parts of the image can be excluded from the comparison. Can be used for automation qa tests.
Stars: ✭ 145 (-2.03%)
Mutual labels:  gradle
Kotlinx Benchmark
Kotlin multiplatform benchmarking toolkit
Stars: ✭ 137 (-7.43%)
Mutual labels:  gradle
Javafbp
Java Implementation of Flow-Based Programming (FBP)
Stars: ✭ 138 (-6.76%)
Mutual labels:  gradle
Androidutillib
🔥 旨在打造一款属于Android开发的强大工具库:内置各种开发必备工具类、Dialog封装、组件重写等
Stars: ✭ 143 (-3.38%)
Mutual labels:  gradle
Xamarin.gradlebindings
VS add-in. Creates Xamarin.Android Binding Projects using gradle
Stars: ✭ 136 (-8.11%)
Mutual labels:  gradle
Buildjar
通用的打包jar gradle插件
Stars: ✭ 147 (-0.68%)
Mutual labels:  gradle
Spring Backend Boilerplate
The modularized backend boilerplate based on Spring Boot Framework, easy to get started and add your business part.
Stars: ✭ 134 (-9.46%)
Mutual labels:  gradle
Kotlin Gradle Plugin Template
🐘 A template to let you started with custom Gradle Plugins + Kotlin in a few seconds
Stars: ✭ 141 (-4.73%)
Mutual labels:  gradle
Android Advanced Blueprint
Android进阶蓝图,各种新技术的体验demo,快速上手Data Binding,Data Binding Compiler V2,Android Architecture,Room等Android的黑科技
Stars: ✭ 148 (+0%)
Mutual labels:  gradle
Infoq Mini Book
Template project for creating an InfoQ Mini-Book with Asciidoctor
Stars: ✭ 147 (-0.68%)
Mutual labels:  gradle
Gradle Pitest Plugin
Gradle plugin for PIT Mutation Testing
Stars: ✭ 144 (-2.7%)
Mutual labels:  gradle

PreferenceHolder

Kotlin Android Library, that makes preference usage simple and fun.

GitHub license Build Status codebeat badge Analytics Analytics

To stay up-to-date with news about library Twitter URL

This library is younger brother of KotlinPreferences.

With PreferenceHolder, you can define different preference fields this way:

object Pref: PreferenceHolder() {
    var canEatPie: Boolean by bindToPreferenceField(true)
}

And use it this way:

if(Pref.canEatPie) //...

Here are other preference definition examples: (see full example and usage)

object UserPref: PreferenceHolder() {
    var canEatPie: Boolean by bindToPreferenceField(true)
    var allPieInTheWorld: Long by bindToPreferenceField(0)

    var isMonsterKiller: Boolean? by bindToPreferenceFieldNullable()
    var monstersKilled: Int? by bindToPreferenceFieldNullable()
    
    // Property with backup is reading stored value in the first usage, 
    // and saving it, in background, each time it is changed.
    var experience: Float? by bindToPropertyWithBackup(-1.0F) 
    var className: String? by bindToPropertyWithBackupNullable()

    // Any type can used if serializer is set. See: Gson serialization
    var character: Character? by bindToPreferenceFieldNullable()
    var savedGame: Game? by bindToPreferenceFieldNullable()

    // Single level collections are also supported if serializer is set. See: Gson serialization
    var longList: Map<Int, Long> by bindToPreferenceField(mapOf(0 to 12L, 10 to 143L))
    var propTest: List<Character>? by bindToPropertyWithBackupNullable()
    var elemTest: Set<Elems> by bindToPreferenceField(setOf(Elems.Elem1, Elems.Elem3))
}

There must be application Context added to PreferenceHolder companion object. Example:

class App : Application() {

    override fun onCreate() {
        super.onCreate()
        PreferenceHolder.setContext(applicationContext)
    }
}

It it suggested to do it in project Application class. As an alternative, PreferenceHolderApplication can also be added as a name of an application in AndroidManifest: (example)

android:name="com.marcinmoskala.kotlinpreferences.PreferenceHolderApplication"

Unit testing components

Library also include test mode:

PreferenceHolder.testingMode = true

When it is turned on, then all properties are acting just like normal properties without binding to preference field. This allows to make unit tests to presenters and to use cases that are using instance of PreferenceHolder.

Install

To add PreferenceHolder to the project, add to build.gradle file:

dependencies {
    compile "com.marcinmoskala.PreferenceHolder:preferenceholder:1.51"
}

While library is located on JitPack, remember to add to module build.gradle (unless you already have it):

repositories {
    maven { url 'https://jitpack.io' }
}

Gson serialization

To use Gson serializer, we need to add following dependency:

dependencies {
    compile "com.marcinmoskala.PreferenceHolder:preferenceholder-gson-serializer:1.51"
}

And specify GsonSerializer as PreferenceHolder serializer:

PreferenceHolder.serializer = GsonSerializer(Gson())

Since then, we can use all types, even one not supported by SharedPreference (like custom objects Character and Game, or collections)

Other libraries

If you like it, remember to leave the star and check out my other libraries:

  • ActivityStarter - Simple Android Library, that provides easy way to start and save state of Activities, Fragments, Services and Receivers with arguments.
  • ArcSeekBar - Good looking curved Android SeekBar
  • VideoPlayView - Custom Android view with video player, loader and placeholder image
  • KotlinAndroidViewBindings - Bindings for properties with simple Kotlin types (Boolean, String) to layout traits (visibility, text).

License

Copyright 2017 Marcin Moskała

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 the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].