Merge "[res] Preserve the resid order in ThemeKey" into udc-dev

This commit is contained in:
Treehugger Robot
2023-06-23 17:58:58 +00:00
committed by Android (Google) Code Review

View File

@@ -2003,13 +2003,25 @@ public class Resources {
private int mHashCode = 0; private int mHashCode = 0;
private boolean containsValue(int resId, boolean force) { private int findValue(int resId, boolean force) {
for (int i = 0; i < mCount; ++i) { for (int i = 0; i < mCount; ++i) {
if (mResId[i] == resId && mForce[i] == force) { if (mResId[i] == resId && mForce[i] == force) {
return true; return i;
} }
} }
return false; return -1;
}
private void moveToLast(int index) {
if (index < 0 || index >= mCount - 1) {
return;
}
final int id = mResId[index];
final boolean force = mForce[index];
System.arraycopy(mResId, index + 1, mResId, index, mCount - index - 1);
mResId[mCount - 1] = id;
System.arraycopy(mForce, index + 1, mForce, index, mCount - index - 1);
mForce[mCount - 1] = force;
} }
public void append(int resId, boolean force) { public void append(int resId, boolean force) {
@@ -2022,15 +2034,17 @@ public class Resources {
} }
// Some apps tend to keep adding same resources over and over, let's protect from it. // Some apps tend to keep adding same resources over and over, let's protect from it.
if (containsValue(resId, force)) { // Note: the order still matters, as the values that come later override the earlier
return; // ones.
final int index = findValue(resId, force);
if (index >= 0) {
moveToLast(index);
} else {
mResId = GrowingArrayUtils.append(mResId, mCount, resId);
mForce = GrowingArrayUtils.append(mForce, mCount, force);
mCount++;
mHashCode = 31 * (31 * mHashCode + resId) + (force ? 1 : 0);
} }
mResId = GrowingArrayUtils.append(mResId, mCount, resId);
mForce = GrowingArrayUtils.append(mForce, mCount, force);
mCount++;
mHashCode = 31 * (31 * mHashCode + resId) + (force ? 1 : 0);
} }
/** /**