Skip to content

Commit 4e7b551

Browse files
jsharkeyAndroid (Google) Code Review
authored andcommitted
Merge "Move HAS_TRANSIENT_STATE flag into a safe area." into jb-mr1-dev
2 parents c3e3311 + 36901b6 commit 4e7b551

File tree

1 file changed

+94
-3
lines changed

1 file changed

+94
-3
lines changed

core/java/android/view/View.java

Lines changed: 94 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,18 @@
8383
import com.android.internal.R;
8484
import com.android.internal.util.Predicate;
8585
import com.android.internal.view.menu.MenuBuilder;
86+
import com.google.android.collect.Lists;
87+
import com.google.android.collect.Maps;
8688

8789
import java.lang.ref.WeakReference;
90+
import java.lang.reflect.Field;
8891
import java.lang.reflect.InvocationTargetException;
8992
import java.lang.reflect.Method;
93+
import java.lang.reflect.Modifier;
9094
import java.util.ArrayList;
9195
import java.util.Arrays;
96+
import java.util.Collections;
97+
import java.util.HashMap;
9298
import java.util.Locale;
9399
import java.util.concurrent.CopyOnWriteArrayList;
94100
import java.util.concurrent.atomic.AtomicInteger;
@@ -1727,7 +1733,51 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
17271733
*/
17281734
static final int PFLAG_INVALIDATED = 0x80000000;
17291735

1730-
/* Masks for mPrivateFlags2 */
1736+
/**
1737+
* Masks for mPrivateFlags2, as generated by dumpFlags():
1738+
*
1739+
* -------|-------|-------|-------|
1740+
* PFLAG2_TEXT_ALIGNMENT_FLAGS[0]
1741+
* PFLAG2_TEXT_DIRECTION_FLAGS[0]
1742+
* 1 PFLAG2_DRAG_CAN_ACCEPT
1743+
* 1 PFLAG2_DRAG_HOVERED
1744+
* 1 PFLAG2_LAYOUT_DIRECTION_MASK_SHIFT
1745+
* 11 PFLAG2_TEXT_DIRECTION_MASK_SHIFT
1746+
* 1 1 PFLAG2_TEXT_DIRECTION_RESOLVED_MASK_SHIFT
1747+
* 11 PFLAG2_LAYOUT_DIRECTION_MASK
1748+
* 11 1 PFLAG2_TEXT_ALIGNMENT_MASK_SHIFT
1749+
* 1 PFLAG2_LAYOUT_DIRECTION_RESOLVED_RTL
1750+
* 1 1 PFLAG2_TEXT_ALIGNMENT_RESOLVED_MASK_SHIFT
1751+
* 1 1 PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_SHIFT
1752+
* 1 PFLAG2_LAYOUT_DIRECTION_RESOLVED
1753+
* 11 PFLAG2_LAYOUT_DIRECTION_RESOLVED_MASK
1754+
* 1 PFLAG2_TEXT_DIRECTION_FLAGS[1]
1755+
* 1 PFLAG2_TEXT_DIRECTION_FLAGS[2]
1756+
* 11 PFLAG2_TEXT_DIRECTION_FLAGS[3]
1757+
* 1 PFLAG2_TEXT_DIRECTION_FLAGS[4]
1758+
* 1 1 PFLAG2_TEXT_DIRECTION_FLAGS[5]
1759+
* 111 PFLAG2_TEXT_DIRECTION_MASK
1760+
* 1 PFLAG2_TEXT_DIRECTION_RESOLVED
1761+
* 1 PFLAG2_TEXT_DIRECTION_RESOLVED_DEFAULT
1762+
* 111 PFLAG2_TEXT_DIRECTION_RESOLVED_MASK
1763+
* 1 PFLAG2_TEXT_ALIGNMENT_FLAGS[1]
1764+
* 1 PFLAG2_TEXT_ALIGNMENT_FLAGS[2]
1765+
* 11 PFLAG2_TEXT_ALIGNMENT_FLAGS[3]
1766+
* 1 PFLAG2_TEXT_ALIGNMENT_FLAGS[4]
1767+
* 1 1 PFLAG2_TEXT_ALIGNMENT_FLAGS[5]
1768+
* 11 PFLAG2_TEXT_ALIGNMENT_FLAGS[6]
1769+
* 111 PFLAG2_TEXT_ALIGNMENT_MASK
1770+
* 1 PFLAG2_TEXT_ALIGNMENT_RESOLVED
1771+
* 1 PFLAG2_TEXT_ALIGNMENT_RESOLVED_DEFAULT
1772+
* 111 PFLAG2_TEXT_ALIGNMENT_RESOLVED_MASK
1773+
* 11 PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_MASK
1774+
* 1 PFLAG2_HAS_TRANSIENT_STATE
1775+
* 1 PFLAG2_ACCESSIBILITY_FOCUSED
1776+
* 1 PFLAG2_ACCESSIBILITY_STATE_CHANGED
1777+
* 1 PFLAG2_VIEW_QUICK_REJECTED
1778+
* 1 PFLAG2_PADDING_RESOLVED
1779+
* -------|-------|-------|-------|
1780+
*/
17311781

17321782
/**
17331783
* Indicates that this view has reported that it can accept the current drag's content.
@@ -1825,8 +1875,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
18251875
*
18261876
* @hide
18271877
*/
1828-
static final int PFLAG2_HAS_TRANSIENT_STATE = 0x00000100;
1829-
1878+
static final int PFLAG2_HAS_TRANSIENT_STATE = 0x1 << 22;
18301879

18311880
/**
18321881
* Text direction is inherited thru {@link ViewGroup}
@@ -18114,4 +18163,46 @@ public boolean apply(View view) {
1811418163
return (view.mLabelForId == mLabeledId);
1811518164
}
1811618165
}
18166+
18167+
/**
18168+
* Dump all private flags in readable format, useful for documentation and
18169+
* sanity checking.
18170+
*/
18171+
private static void dumpFlags() {
18172+
final HashMap<String, String> found = Maps.newHashMap();
18173+
try {
18174+
for (Field field : View.class.getDeclaredFields()) {
18175+
final int modifiers = field.getModifiers();
18176+
if (Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers)) {
18177+
if (field.getType().equals(int.class)) {
18178+
final int value = field.getInt(null);
18179+
dumpFlag(found, field.getName(), value);
18180+
} else if (field.getType().equals(int[].class)) {
18181+
final int[] values = (int[]) field.get(null);
18182+
for (int i = 0; i < values.length; i++) {
18183+
dumpFlag(found, field.getName() + "[" + i + "]", values[i]);
18184+
}
18185+
}
18186+
}
18187+
}
18188+
} catch (IllegalAccessException e) {
18189+
throw new RuntimeException(e);
18190+
}
18191+
18192+
final ArrayList<String> keys = Lists.newArrayList();
18193+
keys.addAll(found.keySet());
18194+
Collections.sort(keys);
18195+
for (String key : keys) {
18196+
Log.d(VIEW_LOG_TAG, found.get(key));
18197+
}
18198+
}
18199+
18200+
private static void dumpFlag(HashMap<String, String> found, String name, int value) {
18201+
// Sort flags by prefix, then by bits, always keeping unique keys
18202+
final String bits = String.format("%32s", Integer.toBinaryString(value)).replace('0', ' ');
18203+
final int prefix = name.indexOf('_');
18204+
final String key = (prefix > 0 ? name.substring(0, prefix) : name) + bits + name;
18205+
final String output = bits + " " + name;
18206+
found.put(key, output);
18207+
}
1811718208
}

0 commit comments

Comments
 (0)