Skip to content

Instantly share code, notes, and snippets.

View PetkevichPavel's full-sized avatar
💭
🚀 Never Stop 🚀

Pavel Petkevich PetkevichPavel

💭
🚀 Never Stop 🚀
View GitHub Profile
@PetkevichPavel
PetkevichPavel / common-android-library.gradle
Created February 27, 2023 21:22
common-android-library.gradle
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply from: "$rootDir/gradle/dependencies.gradle"
def ext = rootProject.ext
android {
compileSdkVersion ext.compileSdkVersion
package com.berider.app.common.utils
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.os.Parcelable
import android.view.inputmethod.InputMethodManager
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.app.ActionBar
import androidx.appcompat.app.AppCompatActivity
@PetkevichPavel
PetkevichPavel / SomeRepository.kt
Last active May 3, 2020 22:36
SharedPreferences under Delegated properties - SomeRepository for test the pattern.
class SomeRepository(
private val someManager: SomeManager
) : ISomeRepository, BaseRepository() {
override val userId: Long?
get() = someManager.userId
override fun testSet(userId: Long) {
someManager.userId = userId
}
@PetkevichPavel
PetkevichPavel / Generic.kt
Created May 3, 2020 22:03
SharedPreferences under Delegated properties - generic type class.
class Generic<T : Any>(val c: Class<T>) {
companion object {
/**
* Returns generic's argument class.
*/
inline operator fun <reified T : Any> invoke() = Generic(T::class.java)
}
/**
* Check if value is instance of desired class.
@PetkevichPavel
PetkevichPavel / GeneralExtensions.kt
Last active May 3, 2020 22:02
SharedPreferences under Delegated properties - PreferencesDelegate putAny.
/**
* SharedPreferences.Editor extension function for putting [value] as Any into Shared preferences.
* @param key - key for the value.
* @param value - value as Any.
*/
@Suppress("UNCHECKED_CAST")
fun SharedPreferences.Editor.putAny(key: String, value: Any) {
when {
Generic<String>().checkType(value) -> (value as? String)?.let { putString(key, it) }
Generic<Boolean>().checkType(value) -> (value as? Boolean)?.let { putBoolean(key, it) }
@PetkevichPavel
PetkevichPavel / PreferencesDelegate.kt
Created May 3, 2020 21:35
SharedPreferences under Delegated properties - PreferencesDelegate setValue.
open class PreferencesDelegate<T>(private val key: String) {
private var variable: Any? = null
private var initialized = false
/**
* Saves given value to SharedPreferences on synchronized thread.
* @param thisRef - is the reference to the class that contains the property
* @param property - is an instance of the [KProperty] class, which contains metadata.
*/
open operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
@PetkevichPavel
PetkevichPavel / PreferencesDelegate.kt
Last active May 3, 2020 20:42
SharedPreferences under Delegated properties - PreferencesDelegate getValue().
open class PreferencesDelegate<T>(private val key: String) {
private var variable: Any? = null
private var initialized = false
/**
* Return desired value by a given key. Performing operation on synchronized thread.
* @param thisRef - is the reference to the class that contains the property
* @param property - is an instance of the [KProperty] class, which contains metadata.
* @return T - T or null.
@PetkevichPavel
PetkevichPavel / SomeManagers.kt
Last active May 4, 2020 18:58
SharedPreferences under Delegated properties
//SomeManager.kt
interface SomeManager {
var userId: Long?
var userName: String?
/**
* Returns true if user valid.
*/
fun isUserValid(): Boolean
@PetkevichPavel
PetkevichPavel / PreferencesDelegate.kt
Last active May 3, 2020 20:39
SharedPreferences under Delegated properties - PreferencesDelegate without implementation.
open class PreferencesDelegate<T>(private val key: String) {
private var variable: Any? = null
/**
* Performing operation on synchronized thread.
* @param thisRef - is the reference to the class that contains the property
* @param property - is an instance of the [KProperty] class, which contains metadata.
* @return T - desired value by a given key or null.
*/
open operator fun getValue(thisRef: Any?, property: KProperty<*>): T? {
@PetkevichPavel
PetkevichPavel / SharedPreferencesProvider.kt
Created May 3, 2020 18:59
SharedPreferences under Delegated Properties
interface SharedPreferencesProvider {
val preferences: SharedPreferences
}