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