diff options
Diffstat (limited to 'java/com/android/contacts/common/util')
-rw-r--r-- | java/com/android/contacts/common/util/BitmapUtil.java | 141 | ||||
-rw-r--r-- | java/com/android/contacts/common/util/UriUtils.java | 90 |
2 files changed, 0 insertions, 231 deletions
diff --git a/java/com/android/contacts/common/util/BitmapUtil.java b/java/com/android/contacts/common/util/BitmapUtil.java deleted file mode 100644 index 51f65f280..000000000 --- a/java/com/android/contacts/common/util/BitmapUtil.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.contacts.common.util; - -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.PorterDuff.Mode; -import android.graphics.PorterDuffXfermode; -import android.graphics.Rect; -import android.graphics.RectF; - -/** Provides static functions to decode bitmaps at the optimal size */ -public class BitmapUtil { - - private BitmapUtil() {} - - /** - * Returns Width or Height of the picture, depending on which size is smaller. Doesn't actually - * decode the picture, so it is pretty efficient to run. - */ - public static int getSmallerExtentFromBytes(byte[] bytes) { - final BitmapFactory.Options options = new BitmapFactory.Options(); - - // don't actually decode the picture, just return its bounds - options.inJustDecodeBounds = true; - BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options); - - // test what the best sample size is - return Math.min(options.outWidth, options.outHeight); - } - - /** - * Finds the optimal sampleSize for loading the picture - * - * @param originalSmallerExtent Width or height of the picture, whichever is smaller - * @param targetExtent Width or height of the target view, whichever is bigger. - * <p>If either one of the parameters is 0 or smaller, no sampling is applied - */ - public static int findOptimalSampleSize(int originalSmallerExtent, int targetExtent) { - // If we don't know sizes, we can't do sampling. - if (targetExtent < 1) { - return 1; - } - if (originalSmallerExtent < 1) { - return 1; - } - - // Test what the best sample size is. To do that, we find the sample size that gives us - // the best trade-off between resulting image size and memory requirement. We allow - // the down-sampled image to be 20% smaller than the target size. That way we can get around - // unfortunate cases where e.g. a 720 picture is requested for 362 and not down-sampled at - // all. Why 20%? Why not. Prove me wrong. - int extent = originalSmallerExtent; - int sampleSize = 1; - while ((extent >> 1) >= targetExtent * 0.8f) { - sampleSize <<= 1; - extent >>= 1; - } - - return sampleSize; - } - - /** Decodes the bitmap with the given sample size */ - public static Bitmap decodeBitmapFromBytes(byte[] bytes, int sampleSize) { - final BitmapFactory.Options options; - if (sampleSize <= 1) { - options = null; - } else { - options = new BitmapFactory.Options(); - options.inSampleSize = sampleSize; - } - return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options); - } - - /** - * Given an input bitmap, scales it to the given width/height and makes it round. - * - * @param input {@link Bitmap} to scale and crop - * @param targetWidth desired output width - * @param targetHeight desired output height - * @return output bitmap scaled to the target width/height and cropped to an oval. The cropping - * algorithm will try to fit as much of the input into the output as possible, while - * preserving the target width/height ratio. - */ - public static Bitmap getRoundedBitmap(Bitmap input, int targetWidth, int targetHeight) { - if (input == null) { - return null; - } - final Bitmap.Config inputConfig = input.getConfig(); - final Bitmap result = - Bitmap.createBitmap( - targetWidth, targetHeight, inputConfig != null ? inputConfig : Bitmap.Config.ARGB_8888); - final Canvas canvas = new Canvas(result); - final Paint paint = new Paint(); - canvas.drawARGB(0, 0, 0, 0); - paint.setAntiAlias(true); - final RectF dst = new RectF(0, 0, targetWidth, targetHeight); - canvas.drawOval(dst, paint); - - // Specifies that only pixels present in the destination (i.e. the drawn oval) should - // be overwritten with pixels from the input bitmap. - paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); - - final int inputWidth = input.getWidth(); - final int inputHeight = input.getHeight(); - - // Choose the largest scale factor that will fit inside the dimensions of the - // input bitmap. - final float scaleBy = - Math.min((float) inputWidth / targetWidth, (float) inputHeight / targetHeight); - - final int xCropAmountHalved = (int) (scaleBy * targetWidth / 2); - final int yCropAmountHalved = (int) (scaleBy * targetHeight / 2); - - final Rect src = - new Rect( - inputWidth / 2 - xCropAmountHalved, - inputHeight / 2 - yCropAmountHalved, - inputWidth / 2 + xCropAmountHalved, - inputHeight / 2 + yCropAmountHalved); - - canvas.drawBitmap(input, src, dst, paint); - return result; - } -} diff --git a/java/com/android/contacts/common/util/UriUtils.java b/java/com/android/contacts/common/util/UriUtils.java deleted file mode 100644 index 4690942ba..000000000 --- a/java/com/android/contacts/common/util/UriUtils.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.contacts.common.util; - -import android.net.Uri; -import android.provider.ContactsContract; -import java.util.List; - -/** Utility methods for dealing with URIs. */ -public class UriUtils { - - /** Static helper, not instantiable. */ - private UriUtils() {} - - /** Checks whether two URI are equal, taking care of the case where either is null. */ - public static boolean areEqual(Uri uri1, Uri uri2) { - if (uri1 == null && uri2 == null) { - return true; - } - if (uri1 == null || uri2 == null) { - return false; - } - return uri1.equals(uri2); - } - - /** Parses a string into a URI and returns null if the given string is null. */ - public static Uri parseUriOrNull(String uriString) { - if (uriString == null) { - return null; - } - return Uri.parse(uriString); - } - - /** Converts a URI into a string, returns null if the given URI is null. */ - public static String uriToString(Uri uri) { - return uri == null ? null : uri.toString(); - } - - public static boolean isEncodedContactUri(Uri uri) { - if (uri == null) { - return false; - } - final String lastPathSegment = uri.getLastPathSegment(); - if (lastPathSegment == null) { - return false; - } - return lastPathSegment.equals(Constants.LOOKUP_URI_ENCODED); - } - - /** - * @return {@code uri} as-is if the authority is of contacts provider. Otherwise or {@code uri} is - * null, return null otherwise - */ - public static Uri nullForNonContactsUri(Uri uri) { - if (uri == null) { - return null; - } - return ContactsContract.AUTHORITY.equals(uri.getAuthority()) ? uri : null; - } - - /** Parses the given URI to determine the original lookup key of the contact. */ - public static String getLookupKeyFromUri(Uri lookupUri) { - // Would be nice to be able to persist the lookup key somehow to avoid having to parse - // the uri entirely just to retrieve the lookup key, but every uri is already parsed - // once anyway to check if it is an encoded JSON uri, so this has negligible effect - // on performance. - if (lookupUri != null && !UriUtils.isEncodedContactUri(lookupUri)) { - final List<String> segments = lookupUri.getPathSegments(); - // This returns the third path segment of the uri, where the lookup key is located. - // See {@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI}. - return (segments.size() < 3) ? null : Uri.encode(segments.get(2)); - } else { - return null; - } - } -} |