diff options
-rw-r--r-- | README.md | 119 |
1 files changed, 119 insertions, 0 deletions
@@ -1,2 +1,121 @@ # KAU + Kotlin Android Utils + +This library contains small helper functions used throughout almost all of my other projects. The goal is to make common interactions executable in a single line. + +# Features +* [KPrefs](#kprefs) +* [Changelog Xml](#changelog) +* [Extensions](#extensions) + +<a name="kprefs"></a> +## KPrefs + +A typical SharedPreference contains items that look like so: + +```Java +class MyPrefs { + public static final String TEXT_COLOR = "text_color"; + + private static SharedPreference prefs = ... + + public static void setTextColor(int color) { + prefs.edit().putInt(TEXT_COLOR, color).apply(); + } + + public static int getTextColor() { + prefs.getInt(TEXT_COLOR, 0xff000000); + } +} +``` + +KPrefs greatly simplifies it by using Kotlin's object pattern and delegates to achieve the following: + +```Kotlin +object KPrefSample : KPref() { + var textColor: Int by kpref("TEXT_COLOR", Color.WHITE) + var bgColor: Int by kpref("BG_COLOR", Color.BLACK) + var isFirstLaunch: Boolean by kpref("IS_FIRST_LAUNCH", true) + ... +} +``` + +By using `KPrefSample.textColor = Color.RED` or `textView.setTextColor(KPrefSample.textColor)` we can effectively set and save the value. + +The values are retrieved lazily and are only done so once; future retrievals will be done with a local value, and updating a preference will both save it in the SharedPreference and update it locally. + +The object inherits the initializer method `fun initialize(c: Context, preferenceName: String)`, which must be invoked (preferably in the Application class) before using a preference. + +There is also a `reset()` method to clear the local values and have them retrieve from the SharedPreference again + +<a name="changelog"></a> +## Changelog XML + +Create an xml resource with the following structure: + +```xml +<?xml version="1.0" encoding="utf-8"?> +<resources> + <version title="v0.1" /> + <item text="Initial Changelog" /> + <item text="Bullet point here" /> + <item text="More points" /> + <item text="" /> <!-- this one is empty and therefore ignored --> +</resources> +``` + +And show it with `context.showChangelog(@XmlRes xmlRes: Int)` + +As mentioned, blank items will be ignored, so feel free to create a bunch of empty lines to facilitate updating the items in the future. + +<a name="extensions"></a> +## Extension Functions + +> "[Extensions](https://kotlinlang.org/docs/reference/extensions.html) provides the ability to extend a class with new functionality without having to inherit from the class" + +### AnimUtils +> Extends View +* Fade In/Fade Out/Circle Reveal with callbacks +* Switch texts in a TextView with a fade transition + +### ColorUtils +> Extends Int +* Check if color is dark or light +* Check if color is visible against another color +* Convert color to HSV (float[]) or hex (String) +* Get the disabled color of a theme +* Adjust alpha +> Extends String +* Parses color; adds onto the original parser by supporting #AAA values +> Extends View +* Various tinting for different views; taken from [MDTintHelper](https://github.com/afollestad/material-dialogs/blob/master/core/src/main/java/com/afollestad/materialdialogs/internal/MDTintHelper.java) + +### ContextUtils +> Extends Activity +* Restart an activity +> Extends Context +* Create a toast directly +* Get resource values through `.color(id)`, `.dimen(id)`, `.drawable(id)`, `.integer(id)`, `.string(id)` +* Get attribute values through resolve methods +* Show a Changelog by parsing an xml resource +* Check if network is available + +### FragmentUtils +> Extends Fragment +* Directly put extras into a fragment; if a bundle does not exist, it will be created + +### IIconUtils +> Extends [IIcon](https://github.com/mikepenz/Android-Iconics) +* toDrawable method that only requires a context; defaults to a white icon of size 24dp and uses a ColorStateList to allow for dimming + +### Utils [Misc] +> Extends Int +* dpToPx & pxToDp conversions + +### ViewUtils +> Extends View +* `visible()`, `invisible()`, `gone()`, `isVisible()`, `isInvisible()`, `isGone()` methods +* matchParent method to set the layout params to match_parent +* Create snackbar directly +* Set IIcon into ImageView directly |