aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.gradle2
-rw-r--r--core/src/main/kotlin/ca/allanwang/kau/email/EmailBuilder.kt6
-rw-r--r--core/src/main/kotlin/ca/allanwang/kau/kpref/KPref.kt17
-rw-r--r--core/src/main/kotlin/ca/allanwang/kau/utils/ContextUtils.kt48
-rw-r--r--core/src/main/res-public/values/strings_commons.xml2
-rw-r--r--core/src/main/res/values/strings.xml4
-rw-r--r--docs/Changelog.md5
-rw-r--r--gradle.properties8
-rw-r--r--mediapicker/build.gradle1
-rw-r--r--sample/src/main/res/drawable/kau.xml4
-rw-r--r--sample/src/main/res/xml/kau_changelog.xml7
11 files changed, 66 insertions, 38 deletions
diff --git a/build.gradle b/build.gradle
index 19f3436..20d17ca 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,7 +6,7 @@ buildscript {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.0.0-beta3'
+ classpath 'com.android.tools.build:gradle:3.0.0-beta6'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${KOTLIN}"
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
classpath 'com.github.triplet.gradle:play-publisher:1.2.0'
diff --git a/core/src/main/kotlin/ca/allanwang/kau/email/EmailBuilder.kt b/core/src/main/kotlin/ca/allanwang/kau/email/EmailBuilder.kt
index 88a0945..8c6acff 100644
--- a/core/src/main/kotlin/ca/allanwang/kau/email/EmailBuilder.kt
+++ b/core/src/main/kotlin/ca/allanwang/kau/email/EmailBuilder.kt
@@ -13,6 +13,7 @@ import ca.allanwang.kau.logging.KL
import ca.allanwang.kau.utils.installerPackageName
import ca.allanwang.kau.utils.isAppInstalled
import ca.allanwang.kau.utils.string
+import ca.allanwang.kau.utils.toast
/**
@@ -76,7 +77,10 @@ class EmailBuilder(val email: String, val subject: String) {
emailBuilder.append("\n").append(footer)
intent.putExtra(Intent.EXTRA_TEXT, emailBuilder.toString())
- context.startActivity(Intent.createChooser(intent, context.resources.getString(R.string.kau_send_via)))
+ if (intent.resolveActivity(context.packageManager) != null)
+ context.startActivity(Intent.createChooser(intent, context.resources.getString(R.string.kau_send_via)))
+ else
+ context.toast("Cannot resolve email activity", log = true)
}
}
diff --git a/core/src/main/kotlin/ca/allanwang/kau/kpref/KPref.kt b/core/src/main/kotlin/ca/allanwang/kau/kpref/KPref.kt
index be16c7c..fbb8c7d 100644
--- a/core/src/main/kotlin/ca/allanwang/kau/kpref/KPref.kt
+++ b/core/src/main/kotlin/ca/allanwang/kau/kpref/KPref.kt
@@ -3,6 +3,7 @@ package ca.allanwang.kau.kpref
import android.content.Context
import android.content.SharedPreferences
import ca.allanwang.kau.kotlin.ILazyResettable
+import ca.allanwang.kau.logging.KL
/**
* Created by Allan Wang on 2017-06-07.
@@ -22,15 +23,13 @@ import ca.allanwang.kau.kotlin.ILazyResettable
*/
open class KPref {
- lateinit private var c: Context
- lateinit internal var PREFERENCE_NAME: String
- private var initialized = false
+ lateinit var PREFERENCE_NAME: String
+ lateinit var sp: SharedPreferences
fun initialize(c: Context, preferenceName: String) {
- if (initialized) throw KPrefException("KPref object $preferenceName has already been initialized; please only do so once")
- initialized = true
- this.c = c.applicationContext
PREFERENCE_NAME = preferenceName
+ sp = c.applicationContext.getSharedPreferences(preferenceName, Context.MODE_PRIVATE)
+ KL.d("Shared Preference $preferenceName has been initialized")
val toDelete = deleteKeys()
if (toDelete.isNotEmpty()) {
val edit = sp.edit()
@@ -39,12 +38,6 @@ open class KPref {
}
}
- //todo hide this
- val sp: SharedPreferences by lazy {
- if (!initialized) throw KPrefException("KPref object has not yet been initialized; please initialize it with a context and preference name")
- c.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE)
- }
-
internal val prefMap: MutableMap<String, ILazyResettable<*>> = mutableMapOf()
fun reset() {
diff --git a/core/src/main/kotlin/ca/allanwang/kau/utils/ContextUtils.kt b/core/src/main/kotlin/ca/allanwang/kau/utils/ContextUtils.kt
index d561c8a..a72c7dd 100644
--- a/core/src/main/kotlin/ca/allanwang/kau/utils/ContextUtils.kt
+++ b/core/src/main/kotlin/ca/allanwang/kau/utils/ContextUtils.kt
@@ -77,7 +77,11 @@ fun Context.startActivitySlideOut(clazz: Class<out Activity>, clearStack: Boolea
fun Context.startPlayStoreLink(@StringRes packageIdRes: Int) = startPlayStoreLink(string(packageIdRes))
fun Context.startPlayStoreLink(packageId: String) {
- startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=$packageId")))
+ val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=$packageId"))
+ if (intent.resolveActivity(packageManager) != null)
+ startActivity(intent)
+ else
+ toast("Cannot resolve play store", log = true)
}
/**
@@ -87,22 +91,24 @@ fun Context.startPlayStoreLink(packageId: String) {
fun Context.startLink(vararg url: String?) {
val link = url.firstOrNull { !it.isNullOrBlank() } ?: return
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(link))
- startActivity(browserIntent)
+ if (browserIntent.resolveActivity(packageManager) != null)
+ startActivity(browserIntent)
+ else
+ toast("Cannot resolve browser", log = true)
}
-fun Context.startLink(@StringRes url: Int) {
- val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(string(url)))
- startActivity(browserIntent)
-}
+fun Context.startLink(@StringRes url: Int) = startLink(string(url))
//Toast helpers
-inline fun View.toast(@StringRes id: Int, duration: Int = Toast.LENGTH_LONG) = context.toast(id, duration)
+inline fun View.toast(@StringRes id: Int, duration: Int = Toast.LENGTH_LONG, log: Boolean = false) = context.toast(id, duration, log)
+
+inline fun Context.toast(@StringRes id: Int, duration: Int = Toast.LENGTH_LONG, log: Boolean = false) = toast(this.string(id), duration, log)
-inline fun Context.toast(@StringRes id: Int, duration: Int = Toast.LENGTH_LONG) = toast(this.string(id), duration)
+inline fun View.toast(text: String, duration: Int = Toast.LENGTH_LONG, log: Boolean = false) = context.toast(text, duration, log)
-inline fun View.toast(text: String, duration: Int = Toast.LENGTH_LONG) = context.toast(text, duration)
-inline fun Context.toast(text: String, duration: Int = Toast.LENGTH_LONG) {
+inline fun Context.toast(text: String, duration: Int = Toast.LENGTH_LONG, log: Boolean = false) {
Toast.makeText(this, text, duration).show()
+ if (log) KL.i("Toast: $text")
}
//Resource retrievers
@@ -163,6 +169,10 @@ fun Context.resolveString(@AttrRes attr: Int, fallback: String = ""): String {
inline fun Context.materialDialog(action: MaterialDialog.Builder.() -> Unit): MaterialDialog {
val builder = MaterialDialog.Builder(this)
builder.action()
+ if (isFinishing) {
+ KL.d("Material Dialog triggered from finishing context; did not show")
+ return builder.build()
+ }
return builder.show()
}
@@ -192,9 +202,21 @@ fun Context.copyToClipboard(text: String?, label: String = "Copied Text", showTo
}
fun Context.shareText(text: String?) {
- if (text == null) return toast(R.string.kau_text_is_null)
+ if (text == null) return toast("Share text is null")
val intent = Intent(Intent.ACTION_SEND)
intent.type = "text/plain"
intent.putExtra(Intent.EXTRA_TEXT, text)
- startActivity(Intent.createChooser(intent, string(R.string.kau_share)))
-} \ No newline at end of file
+ val chooserIntent = Intent.createChooser(intent, string(R.string.kau_share))
+ if (chooserIntent.resolveActivity(packageManager) != null)
+ startActivity(chooserIntent)
+ else
+ toast("Cannot resolve activity to share text", log = true)
+}
+
+/**
+ * Check if given context is finishing.
+ * This is a wrapper to check if it's both an activity and finishing
+ * As of now, it is only checked when tied to an activity
+ */
+inline val Context.isFinishing: Boolean
+ get() = (this as? Activity)?.isFinishing ?: false \ No newline at end of file
diff --git a/core/src/main/res-public/values/strings_commons.xml b/core/src/main/res-public/values/strings_commons.xml
index d236021..6bea9a6 100644
--- a/core/src/main/res-public/values/strings_commons.xml
+++ b/core/src/main/res-public/values/strings_commons.xml
@@ -38,7 +38,7 @@ Most resources are verbatim and x represents a formatted item
<string name="kau_no">No</string>
<string name="kau_no_results_found">No Results Found</string>
<string name="kau_none">None</string>
- <string name="kau_ok">@android:string/ok</string>
+ <string name="kau_ok">OK</string>
<string name="kau_play_store">Play Store</string>
<string name="kau_rate">Rate</string>
<string name="kau_report_bug">Report A Bug</string>
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
deleted file mode 100644
index d8b2993..0000000
--- a/core/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="kau_text_is_null">Text is null</string>
-</resources> \ No newline at end of file
diff --git a/docs/Changelog.md b/docs/Changelog.md
index aa37c4d..70a61ee 100644
--- a/docs/Changelog.md
+++ b/docs/Changelog.md
@@ -1,11 +1,16 @@
# Changelog
+## v3.4.1
+* Validate context before showing dialogs
+* Add intent resolver checks prior to all executions.
+
## v3.4.0
* Update to gradle 4.x; api and implementation rather than compile
* Update dependencies
* :searchview: Ensure reveals are called on the UI thread
* :searchview: Check that searchview has a parent before checking card state
* :mediapicker: Reuse request manager from activity
+* :kpref-activity: Add bounds to text item
## v3.3.2
* :kpref-activity: Add visibility toggle to Core contract. Items can override this to show/hide given preferences based on boolean callbacks.
diff --git a/gradle.properties b/gradle.properties
index 9a1177d..32ea648 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -21,18 +21,18 @@ CORE_MIN_SDK=19
MIN_SDK=21
TARGET_SDK=26
BUILD_TOOLS=26.0.1
-ANDROID_SUPPORT_LIBS=26.0.1
+ANDROID_SUPPORT_LIBS=26.1.0
-VERSION_NAME=3.4.0
+VERSION_NAME=3.4.2
-KOTLIN=1.1.4-2
+KOTLIN=1.1.4-3
ABOUT_LIBRARIES=5.9.7
ANKO=0.10.1
BLURRY=2.1.1
CONSTRAINT_LAYOUT=1.1.0-beta1
FAST_ADAPTER=2.6.3
FAST_ADAPTER_COMMONS=2.6.3
-GLIDE=4.0.0
+GLIDE=4.1.1
ICONICS=2.9.3
IICON_GOOGLE=3.0.1.1
MATERIAL_DIALOG=0.9.4.7
diff --git a/mediapicker/build.gradle b/mediapicker/build.gradle
index eff6a77..0f90f7b 100644
--- a/mediapicker/build.gradle
+++ b/mediapicker/build.gradle
@@ -1,6 +1,7 @@
ext.kauSubModuleMinSdk = project.CORE_MIN_SDK
apply from: '../android-lib.gradle'
+apply plugin: 'kotlin-kapt'
dependencies {
implementation project(':core-ui')
diff --git a/sample/src/main/res/drawable/kau.xml b/sample/src/main/res/drawable/kau.xml
index b0a7be8..47612e0 100644
--- a/sample/src/main/res/drawable/kau.xml
+++ b/sample/src/main/res/drawable/kau.xml
@@ -8,11 +8,11 @@
<path
android:fillColor="#00a9ff"
android:fillType="evenOdd"
- android:pathData="M42.8336 42.7538l19-42.75 31.67656 57H57.0836zM0 .08894h27L0 28.6213z" />
+ android:pathData="M42.8336 42.7538l19-42.75 31.67656 57H57.0836zM0 0.08894h27L0 28.6213z" />
<path
android:fillColor="#ff8900"
android:fillType="evenOdd"
- android:pathData="M28.5 .0038 H57l-57 57v-26.882z" />
+ android:pathData="M28.5 0.0038 H57l-57 57v-26.882z" />
<path
android:fillColor="#00a9ff"
android:fillType="evenOdd"
diff --git a/sample/src/main/res/xml/kau_changelog.xml b/sample/src/main/res/xml/kau_changelog.xml
index 6f76f66..8476660 100644
--- a/sample/src/main/res/xml/kau_changelog.xml
+++ b/sample/src/main/res/xml/kau_changelog.xml
@@ -5,6 +5,13 @@
<version title="v"/>
<item text="" />
-->
+
+ <version title="v3.4.1"/>
+ <item text="Validate context before showing dialogs" />
+ <item text="Add intent resolver checks prior to all executions." />
+ <item text="" />
+ <item text="" />
+ <item text="" />
<version title="v3.4.0"/>
<item text="Update to gradle 4.x; api and implementation rather than compile" />