diff options
Diffstat (limited to 'android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/ContentResolverCompat.java')
-rw-r--r-- | android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/ContentResolverCompat.java | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/ContentResolverCompat.java b/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/ContentResolverCompat.java new file mode 100644 index 0000000000..4cd5103776 --- /dev/null +++ b/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/ContentResolverCompat.java @@ -0,0 +1,67 @@ + +package org.holoeverywhere; + +import java.io.FileNotFoundException; +import java.util.List; + +import android.content.Context; +import android.content.pm.PackageManager.NameNotFoundException; +import android.content.res.Resources; +import android.net.Uri; +import android.text.TextUtils; + +public class ContentResolverCompat { + + public static class OpenResourceIdResult { + public int id; + public Resources r; + } + + public static OpenResourceIdResult getResourceId(Context context, Uri uri) + throws FileNotFoundException { + String authority = uri.getAuthority(); + Resources r; + if (TextUtils.isEmpty(authority)) { + throw new FileNotFoundException("No authority: " + uri); + } else { + try { + r = context.getPackageManager().getResourcesForApplication( + authority); + } catch (NameNotFoundException ex) { + throw new FileNotFoundException( + "No package found for authority: " + uri); + } + } + List<String> path = uri.getPathSegments(); + if (path == null) { + throw new FileNotFoundException("No path: " + uri); + } + int len = path.size(); + int id; + if (len == 1) { + try { + id = Integer.parseInt(path.get(0)); + } catch (NumberFormatException e) { + throw new FileNotFoundException( + "Single path segment is not a resource ID: " + uri); + } + } else if (len == 2) { + id = r.getIdentifier(path.get(1), path.get(0), authority); + } else { + throw new FileNotFoundException("More than two path segments: " + + uri); + } + if (id == 0) { + throw new FileNotFoundException("No resource found for: " + uri); + } + OpenResourceIdResult res = new OpenResourceIdResult(); + res.r = r; + res.id = id; + return res; + } + + private ContentResolverCompat() { + + } + +} |