1 package com.android.launcher3.util 2 3 import java.util.StringJoiner 4 import java.util.function.IntFunction 5 import java.util.function.LongFunction 6 7 object FlagDebugUtils { 8 9 /** Appends the [flagName] to [str] when the [flag] is set in [flags]. */ 10 @JvmStatic appendFlagnull11 fun appendFlag(str: StringJoiner, flags: Int, flag: Int, flagName: String) { 12 if (flags and flag != 0) { 13 str.add(flagName) 14 } 15 } 16 /** Appends the [flagName] to [str] when the [flag] is set in [flags]. */ 17 @JvmStatic appendFlagnull18 fun appendFlag(str: StringJoiner, flags: Long, flag: Long, flagName: String) { 19 if (flags and flag != 0L) { 20 str.add(flagName) 21 } 22 } 23 24 /** 25 * Produces a human-readable representation of the [current] flags, followed by a diff from from 26 * [previous]. 27 * 28 * The resulting string is intented for logging and debugging. 29 */ 30 @JvmStatic formatFlagChangenull31 fun formatFlagChange(current: Int, previous: Int, flagSerializer: IntFunction<String>): String { 32 val result = StringJoiner(" ") 33 result.add("[" + flagSerializer.apply(current) + "]") 34 val changed = current xor previous 35 val added = current and changed 36 if (added != 0) { 37 result.add("+[" + flagSerializer.apply(added) + "]") 38 } 39 val removed = previous and changed 40 if (removed != 0) { 41 result.add("-[" + flagSerializer.apply(removed) + "]") 42 } 43 return result.toString() 44 } 45 46 /** 47 * Produces a human-readable representation of the [current] flags, followed by a diff from from 48 * [previous]. 49 * 50 * The resulting string is intented for logging and debugging. 51 */ 52 @JvmStatic formatFlagChangenull53 fun formatFlagChange( 54 current: Long, 55 previous: Long, 56 flagSerializer: LongFunction<String> 57 ): String { 58 val result = StringJoiner(" ") 59 result.add("[" + flagSerializer.apply(current) + "]") 60 val changed = current xor previous 61 val added = current and changed 62 if (added != 0L) { 63 result.add("+[" + flagSerializer.apply(added) + "]") 64 } 65 val removed = previous and changed 66 if (removed != 0L) { 67 result.add("-[" + flagSerializer.apply(removed) + "]") 68 } 69 return result.toString() 70 } 71 } 72