aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2017-06-10 17:00:40 -0700
committerGitHub <noreply@github.com>2017-06-10 17:00:40 -0700
commitd3d599051c4246cb978e259d466ab23c30187e9a (patch)
tree2291990f376cbc6e178632afb3b7d9815229373f
parent75dd060f2c265a069a0794ed659d780909df92ec (diff)
downloadkau-d3d599051c4246cb978e259d466ab23c30187e9a.tar.gz
kau-d3d599051c4246cb978e259d466ab23c30187e9a.tar.bz2
kau-d3d599051c4246cb978e259d466ab23c30187e9a.zip
Create README.md
-rw-r--r--README.md119
1 files changed, 119 insertions, 0 deletions
diff --git a/README.md b/README.md
index 580717a..97fd42d 100644
--- a/README.md
+++ b/README.md
@@ -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