package org.commcare.utils;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Resources;
import android.os.Build;
import android.util.TypedValue;
import android.view.View;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author ctsims
*/
public class AndroidUtil {
private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1);
/**
* Generate a value suitable for use in setId(int).
* This value will not collide with ID values generated at build time by aapt for R.id.
*
* @return a generated ID value
*/
@SuppressLint("NewApi")
public static int generateViewId() {
//raw implementation for < API 17
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
for (; ; ) {
final int result = sNextGeneratedId.get();
// aapt-generated IDs have the high byte nonzero; clamp to the range under that.
int newValue = result + 1;
if (newValue > 0x00FFFFFF) newValue = 1; // Roll over to 1, not 0.
if (sNextGeneratedId.compareAndSet(result, newValue)) {
return result;
}
}
} else {
//Whatever the current implementation is otherwise
return View.generateViewId();
}
}
/**
* Returns an int array with the color values for the given attributes (R.attr).
* Any unresolved colors will be represented by -1
*/
public static int[] getThemeColorIDs(final Context context, final int[] attrs) {
int[] colors = new int[attrs.length];
Resources.Theme theme = context.getTheme();
for (int i = 0; i < attrs.length; i++) {
TypedValue typedValue = new TypedValue();
if (theme.resolveAttribute(attrs[i], typedValue, true)) {
colors[i] = typedValue.data;
} else {
colors[i] = -1;
}
}
return colors;
}
}