Merge commit '42b2e5ca519766e37ce6941ba4faecc9691cc403' into upstream
[debian/openrocket] / android-libraries / ActionBarSherlock / src / com / actionbarsherlock / internal / ResourcesCompat.java
diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ResourcesCompat.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ResourcesCompat.java
new file mode 100644 (file)
index 0000000..8e1efe8
--- /dev/null
@@ -0,0 +1,95 @@
+package com.actionbarsherlock.internal;
+
+import android.content.Context;
+import android.os.Build;
+import android.util.DisplayMetrics;
+import com.actionbarsherlock.R;
+
+public final class ResourcesCompat {
+    //No instances
+    private ResourcesCompat() {}
+
+
+    /**
+     * Support implementation of {@code getResources().getBoolean()} that we
+     * can use to simulate filtering based on width and smallest width
+     * qualifiers on pre-3.2.
+     *
+     * @param context Context to load booleans from on 3.2+ and to fetch the
+     * display metrics.
+     * @param id Id of boolean to load.
+     * @return Associated boolean value as reflected by the current display
+     * metrics.
+     */
+    public static boolean getResources_getBoolean(Context context, int id) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
+            return context.getResources().getBoolean(id);
+        }
+
+        DisplayMetrics metrics = context.getResources().getDisplayMetrics();
+        float widthDp = metrics.widthPixels / metrics.density;
+        float heightDp = metrics.heightPixels / metrics.density;
+        float smallestWidthDp = (widthDp < heightDp) ? widthDp : heightDp;
+
+        if (id == R.bool.abs__action_bar_embed_tabs) {
+            if (widthDp >= 480) {
+                return true; //values-w480dp
+            }
+            return false; //values
+        }
+        if (id == R.bool.abs__split_action_bar_is_narrow) {
+            if (widthDp >= 480) {
+                return false; //values-w480dp
+            }
+            return true; //values
+        }
+        if (id == R.bool.abs__action_bar_expanded_action_views_exclusive) {
+            if (smallestWidthDp >= 600) {
+                return false; //values-sw600dp
+            }
+            return true; //values
+        }
+        if (id == R.bool.abs__config_allowActionMenuItemTextWithIcon) {
+            if (widthDp >= 480) {
+                return true; //values-w480dp
+            }
+            return false; //values
+        }
+
+        throw new IllegalArgumentException("Unknown boolean resource ID " + id);
+    }
+
+    /**
+     * Support implementation of {@code getResources().getInteger()} that we
+     * can use to simulate filtering based on width qualifiers on pre-3.2.
+     *
+     * @param context Context to load integers from on 3.2+ and to fetch the
+     * display metrics.
+     * @param id Id of integer to load.
+     * @return Associated integer value as reflected by the current display
+     * metrics.
+     */
+    public static int getResources_getInteger(Context context, int id) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
+            return context.getResources().getInteger(id);
+        }
+
+        DisplayMetrics metrics = context.getResources().getDisplayMetrics();
+        float widthDp = metrics.widthPixels / metrics.density;
+
+        if (id == R.integer.abs__max_action_buttons) {
+            if (widthDp >= 600) {
+                return 5; //values-w600dp
+            }
+            if (widthDp >= 500) {
+                return 4; //values-w500dp
+            }
+            if (widthDp >= 360) {
+                return 3; //values-w360dp
+            }
+            return 2; //values
+        }
+
+        throw new IllegalArgumentException("Unknown integer resource ID " + id);
+    }
+}