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