Search code examples
javaandroidandroid-intentkotlinbitwise-operators

How to combine Intent flags in Kotlin


I want to combine two intent flags as we do below in Android:

Intent intent = new Intent(this, MapsActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);

I tried doing something like this but it didn't work for me:

val intent = Intent(context, MapActivity::class.java)
intent.flags = (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)

Solution

  • Explanation:

    The operation that is applied to the flags is a bitwise or. In Java you have the | operator for that.

    As of bitwise operations [in Kotlin], there're no special characters for them, but just named functions that can be called in infix form.

    Source

    Here a list of all bitwise operations for Int and Long

    • shl(bits) – signed shift left (Java's <<)
    • shr(bits) – signed shift right (Java's >>)
    • ushr(bits) – unsigned shift right (Java's >>>)
    • and(bits) – bitwise and (Java's &)
    • or(bits) – bitwise or (Java's |)
    • xor(bits) – bitwise xor (Java's ^)
    • inv() – bitwise inversion (Java's ~)

    Solution:

    So, in your case you only need to call or in between your arguments like so.

    intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK