/** * Copyright 2014 Daum Kakao Corp. * * Redistribution and modification in source or binary forms are not permitted without specific prior written permission.  * * 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.kakao.helper; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.Signature; import android.net.Uri; import android.os.Bundle; import android.os.Parcelable; import android.util.Log; import com.kakao.exception.KakaoException; public final class Utility { private static final String TAG = Utility.class.getCanonicalName(); public static boolean isNullOrEmpty(final String s) { return (s == null) || (s.length() == 0); } public static Uri buildUri(final String authority, final String path) { Uri.Builder builder = new Uri.Builder(); builder.scheme(CommonProtocol.URL_SCHEME); builder.authority(authority); builder.path(path); return builder.build(); } public static Uri buildUri(final String authority, final String path, final Bundle parameters) { Uri.Builder builder = new Uri.Builder(); builder.scheme(CommonProtocol.URL_SCHEME); builder.authority(authority); builder.path(path); for (String key : parameters.keySet()) { Object parameter = parameters.get(key); if (parameter instanceof String) { builder.appendQueryParameter(key, (String) parameter); } } return builder.build(); } public static void putObjectInBundle(final Bundle bundle, final String key, final Object value) { if (value instanceof String) { bundle.putString(key, (String) value); } else if (value instanceof Parcelable) { bundle.putParcelable(key, (Parcelable) value); } else if (value instanceof byte[]) { bundle.putByteArray(key, (byte[]) value); } else { throw new KakaoException("attempted to add unsupported type to Bundle"); } } public static void notNull(final Object arg, final String name) { if (arg == null) { throw new NullPointerException("Argument '" + name + "' cannot be null"); } } public static String getMetadata(final Context context, final String key) { try { ApplicationInfo ai = context.getPackageManager().getApplicationInfo( context.getPackageName(), PackageManager.GET_META_DATA); if(ai == null) return null; else if(ai.metaData == null) return null; else return ai.metaData.getString(key); } catch (PackageManager.NameNotFoundException e) { return null; } } public static ResolveInfo resolveIntent(final Context context, final Intent intent) { return context.getPackageManager().resolveActivity(intent, 0); } public static PackageInfo getPackageInfo(final Context context) { return getPackageInfo(context, 0); } public static PackageInfo getPackageInfo(final Context context, int flag) { try { return context.getPackageManager().getPackageInfo(context.getPackageName(), flag); } catch (PackageManager.NameNotFoundException e) { Log.w(TAG, "Unable to get PackageInfo", e); } return null; } public static int getAppVersion(final Context context) { return getPackageInfo(context).versionCode; } public static String getAppPackageName(final Context context) { return getPackageInfo(context).packageName; } public static String getKeyHash(final Context context) { PackageInfo packageInfo = getPackageInfo(context, PackageManager.GET_SIGNATURES); if (packageInfo == null) return null; for (Signature signature : packageInfo.signatures) { try { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); return android.util.Base64.encodeToString(md.digest(), android.util.Base64.NO_WRAP); } catch (NoSuchAlgorithmException e) { Log.w(TAG, "Unable to get MessageDigest. signature=" + signature, e); } } return null; } }