kite

Additional

Language
Kotlin
Version
1.0.0 (Nov 22, 2020)
Created
Nov 15, 2020
Updated
Nov 22, 2020
Owner
Andrea Cioccarelli (cioccarellia)
Contributor
Andrea Cioccarelli (cioccarellia)
1
Activity
Badge
Generate
Download
Source code
APK file

Advertising

Kite

Android Resource Wrapper Library.

TLDR

Fed up with typing ContextCompact, resources and context all over your apps to access your resources? Say no more.

implementation 'com.cioccarellia:kite:1.0.0'
  • ???? Access all app resources with one unified syntax.
  • 🧬 Null safe layer between the Android framework java code and your app.
  • ???? Transparent and lightweight wrapper.
  • 🔒 Extensive built-in checks.
  • Easy to implement in existing apps.
  • ❤️ Kotlin powered, 100%.

Usage

Initialize the kite global object (ideally inside your Application class) and pass to it the application context.

class App : Application() {

    companion object {
        lateinit var appContext: Context
        val kite by lazy { Kite.fly(appContext) }
    }

    override fun onCreate() {
        super.onCreate()
        appContext = this
    }
}

You're all set. Simply import the kite object, select what you want to use and access it with the bracket notation [].

// Kite
fab.rippleColor =         kite.color[R.color.md_light_lime]
fab.backgroundTintList =  kite.colorStateList[R.color.md_lime]
fab.text =                kite.string[R.string.ride]

// Standard
fab.rippleColor =         ContextCompact.getColor(appContext, R.color.md_light_lime)
fab.backgroundTintList =  ColorStateList.valueOf(R.color.md_lime)
fab.text =                appContext.getString(R.string.ride)

Supported Resources

Resource Type AAPT class Namespace Input Output Implementation API Variants
Strings R.string Kite.string @StringRes string: Int String Context.getString() / formatArgs
Plurals R.plurals Kite.plural @PluralRes plural: Int, quantity: Int String Resources.getQuantityString() / formatArgs
Texts R.string Kite.text @StringRes text: Int CharSequence Context.getText() / /
Color R.color Kite.color @ColorRes color: Int @ColorInt Color ContextCompat.getColor() / /
ColorStateLists R.color Kite.colorStateList @ColorRes colorStateList: Int ColorStateList ContextCompat.getColorStateList() / /
Drawables R.drawable Kite.drawable @DrawableRes drawable: Int Drawable ContextCompat.getDrawable() / Resources.Theme?
Layouts R.layout Kite.layout @LayoutRes layout: Int XmlResourceParser Resources.getLayout() / /
Integer R.integer Kite.integer @IntegerRes integer: Int Int Resources.getInteger() / /
Booleans R.bool Kite.booleans @BoolRes boolean: Int Boolean Resources.getBoolean() / /
Dimensions R.dimen Kite.dimension @DimenRes dimensions: Int Float Resources.getDimensions() / /
Fractions R.fraction Kite.fraction @FractionRes fraction: Int, base: Int, pbase: Int Float Resources.getFraction() / /
Fonts R.font Kite.font @FontRes font: Int Typeface Resources.getFont() 26 /
Animations R.anim Kite.animation @AnimRes animation: Int Animation AnimationUtils.loadAnimation() / /
Interpolators R.interpolator Kite.interpolation @InterpolatorRes interpolator: Int Interpolator AnimationUtils.loadInterpolator() / /
IntArray R.array Kite.intArray @ArrayRes intArray: Int IntArray Resources.getIntArray() / /
StringArray R.array Kite.stringArray @ArrayRes stringArray: Int Array<out String> Resources.getStringArray() / /
TypedArray R.array Kite.typedArray @ArrayRes typedArray: Int TypedArray Resources.obtainTypedArray() / /
Identifiers R.id Kite.identifier name: String, defType: String, defPackage: String Int Resources.getIdentifier() / /
Xmls R.xml Kite.xml @XmlRes xml: Int XmlResourceParser Resources.getXml() / /
Raws R.raw Kite.raw @RawRes raw: Int InputStream Resources.openRawResource() / TypedValue

🛑 Known Issues

  • Annotation checks over resource parameters (functions which take as argument some annotated value, like @ColorRes, @StringRes) are not extensively performed by Android Studio, when using kotlin operator functions: I created a bug report at google issue tracker here. Hope to see it fixed soon.
  • After {@link Build.VERSION_CODES#R}, {@link Resources} must be obtained by {@link android.app.Activity} or {@link android.content.Context} created with {@link android.content.Context#createWindowContext(int, Bundle)}. {@link Application#getResources()} may report wrong values in multi-window or on secondary displays.