1e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesipackage com.xtremelabs.robolectric.shadows; 2e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi 3e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesiimport com.xtremelabs.robolectric.internal.Implementation; 4e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesiimport com.xtremelabs.robolectric.internal.Implements; 5e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi 6e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesiimport android.view.View; 7e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi 8e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi/** 9facabaa9fa30aac3ee32ae2970d06bbe5fcd0209Michael Portuesi * Shadow for {@code View.MeasureSpec} inner class. 10e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi * 11e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi * As the implementation is very simple, it is taken from the AOSP source. 12e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi */ 13e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi@Implements(View.MeasureSpec.class) 14e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesipublic class ShadowViewMeasureSpec { 15e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi 16e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi private static final int MODE_SHIFT = 30; 17e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi private static final int MODE_MASK = 0x3 << MODE_SHIFT; 18e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi 19e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi @Implementation 20e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi public static int getMode (int measureSpec) { 21e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi return (measureSpec & MODE_MASK); 22e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi } 23e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi 24e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi @Implementation 25e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi public static int getSize (int measureSpec) { 26e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi return (measureSpec & ~MODE_MASK); 27e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi } 28e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi 29e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi @Implementation 30e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi public static int makeMeasureSpec (int size, int mode) { 31e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi return size + mode; 32e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi } 33e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi 34e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi @Implementation 35e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi public static String toString (int measureSpec) { 36e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi int mode = getMode(measureSpec); 37e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi int size = getSize(measureSpec); 38e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi 39e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi StringBuilder sb = new StringBuilder("MeasureSpec: "); 40e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi 41e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi if (mode == View.MeasureSpec.UNSPECIFIED) 42e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi sb.append("UNSPECIFIED "); 43e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi else if (mode == View.MeasureSpec.EXACTLY) 44e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi sb.append("EXACTLY "); 45e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi else if (mode == View.MeasureSpec.AT_MOST) 46e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi sb.append("AT_MOST "); 47e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi else 48e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi sb.append(mode).append(" "); 49e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi 50e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi sb.append(size); 51e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi return sb.toString(); 52e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi } 53e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi 54e83be8e8a72da167dba079d8b190d1b4ec4c0968Michael Portuesi} 55