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 boolean containsValue(int resId, boolean force) {
private int findValue(int resId, boolean force) {
for (int i = 0; i < mCount; ++i) {
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) {
@@ -2022,15 +2034,17 @@ public class Resources {
}
// Some apps tend to keep adding same resources over and over, let's protect from it.
if (containsValue(resId, force)) {
return;
// Note: the order still matters, as the values that come later override the earlier
// 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);
}
/**