These are things that I found annoying writing a complex library in Kotlin. While I am also a Scala developer, these should not necessarily be juxtaposed w/ Scala (even if I reference Scala) as some of my annoyances are with features that Scala doesn't even have. This is also not trying to be opinionated on whether Kotlin is good/bad (for the record, I think it's good). I have numbered them for easy reference. I can give examples for anything I am talking about below upon request. I'm sure there are good reasons for all of them.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @return [LiveData] with value produced from combining [source1] and [source2] using [combiner] | |
* | |
* This function produces new value only if [source1] and [source2] values are not null | |
*/ | |
fun <T1, T2, R> combineNonNull( | |
source1: LiveData<T1>, | |
source2: LiveData<T2>, | |
combiner: (T1, T2) -> R |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* This will recover and inject your interface in your fragments or activities | |
*/ | |
inline fun <reified I, reified O> ComponentCallbacks.injectMapper(): Lazy<Mapper<I, O>> { | |
return inject(named(identifier<I, O>())) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
OBS: O var_number_int é a varável que recebera o valor a ser convertido em DP | |
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, var_number_int, getResources().getDisplayMetrics()) | |
##KOTLIN | |
val Int.dp: Int | |
get() = (this * Resources.getSystem().displayMetrics.density + 0.5f).toInt() | |
val Float.dp: Int |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Replaces the default RxJava schedulers with a synchronous one. | |
*/ | |
class RxImmediateSchedulerRule : TestRule { | |
private val immediateScheduler = object : Scheduler() { | |
@NonNull | |
override fun scheduleDirect(run: Runnable, delay: Long, unit: TimeUnit): Disposable { | |
// Hack to prevent stack overflows in unit tests when scheduling with a delay; | |
return super.scheduleDirect(run, 0, unit) | |
} |
- You need the rights to reopen pull requests on the repository.
- The pull request hasn't been merged, just closed.
- Write down the current commit hash of your PR-branch
git log --oneline -1 <PR-BRANCH>
- Write down the latest commit hash on github before the PR has been closed.
git push -f origin :
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Unless specified otherwise, all of the below tinting applies to both Lollipop and pre-Lollipop using AppCompat v21. | |
To use the support version of these attributes, remove the android namespace. | |
For instance, "android:colorControlNormal" becomes "colorControlNormal". | |
These attributes will be propagated to their corresponding attributes within the android namespace | |
for devices running Lollipop. Any exceptions to this will be noted by including the "android:" prefix. | |
All Clickable Views: | |
----------- |
I use these snippets to implement Google Now Card appear-animations on Android. Add these two files to your res/anim/
folder and add a swing_anim_time
integer to your values:
<!-- res/values/strings.xml -->
<integer name="swing_anim_time">750</integer>
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static void postNewComment(Context context,final UserAccount userAccount,final String comment,final int blogId,final int postId){ | |
mPostCommentResponse.requestStarted(); | |
RequestQueue queue = Volley.newRequestQueue(context); | |
StringRequest sr = new StringRequest(Request.Method.POST,"http://api.someservice.com/post/comment", new Response.Listener<String>() { | |
@Override | |
public void onResponse(String response) { | |
mPostCommentResponse.requestCompleted(); | |
} | |
}, new Response.ErrorListener() { | |
@Override |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.content.Context; | |
import android.content.pm.PackageInfo; | |
import android.content.pm.PackageManager; | |
import android.content.pm.PackageManager.NameNotFoundException; | |
import android.content.pm.Signature; | |
public class TamperCheck { | |
//we store the hash of the signture for a little more protection | |
private static final String APP_SIGNATURE = "1038C0E34658923C4192E61B16846"; |
NewerOlder