package org.openintents.about;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
public class AboutUtils {
private static final String TAG = "AboutUtils";
public static String getTextFromArray(final String[] array) {
if (array == null) {
return "";
}
String text = "";
for (String person : array) {
text += person + "\n";
}
if (text.length() > 0) {
// delete last "\n"
text = text.substring(0, text.length() - 1);
}
return text;
}
/**
* Get String array from Extra or from Meta-data through resources.
*
* @param packagename
* @param intent
* @param extra
* @param metadata
*/
public static String[] getStringArrayExtraOrMetadata(final Context context, final String packagename,
final Intent intent, final String extra, final String metadata) {
if (intent.hasExtra(extra)
&& intent.getStringArrayExtra(extra)
!= null) {
return intent.getStringArrayExtra(extra);
} else {
//Try meta data of package
Bundle md = null;
try {
md = context.getPackageManager().getApplicationInfo(
packagename, PackageManager.GET_META_DATA).metaData;
} catch (NameNotFoundException e) {
Log.e(TAG, "Package name not found", e);
}
if (md != null) {
String[] array = null;
try {
int id = md.getInt(metadata);
Resources resources = context.getPackageManager()
.getResourcesForApplication(packagename);
array = resources.getStringArray(id);
} catch (NameNotFoundException e) {
Log.e(TAG, "Package name not found ", e);
} catch (NumberFormatException e) {
Log.e(TAG, "Metadata not valid id.", e);
} catch (Resources.NotFoundException e) {
Log.e(TAG, "Resource not found.", e);
}
if (array != null) {
return array;
} else {
return null;
}
} else {
return null;
}
}
}
/**
* Get string from extra or from metadata.
*
* @param context
* @param packagename
* @param intent
* @param extra
* @param metadata
* @return
*/
public static String getStringExtraOrMetadata(final Context context, final String packagename,
final Intent intent, final String extra, final String metadata) {
if (intent.hasExtra(extra)
&& intent.getStringExtra(extra) != null) {
return intent.getStringExtra(extra);
} else {
//Try meta data of package
Bundle md = null;
try {
md = context.getPackageManager().getApplicationInfo(
packagename, PackageManager.GET_META_DATA).metaData;
} catch (NameNotFoundException e) {
Log.e(TAG, "Package name not found", e);
}
if (md != null
&& !TextUtils.isEmpty(md
.getString(metadata))) {
return md
.getString(metadata);
} else {
return "";
}
}
}
/**
* Get resource ID from extra or from metadata.
*
* @param context
* @param packagename
* @param intent
* @param extra
* @param metadata
* @return
*/
public static int getResourceIdExtraOrMetadata(final Context context, final String packagename,
final Intent intent, final String extra, final String metadata) {
if (intent.hasExtra(extra)
&& intent.getStringExtra(extra) != null) {
int id = 0;
try {
String resourcename = intent.getStringExtra(extra);
Resources resources = context.getPackageManager()
.getResourcesForApplication(packagename);
Log.i(TAG, "Looking up resource Id for " + resourcename);
id = resources.getIdentifier(resourcename, "", packagename);
} catch (NameNotFoundException e) {
Log.e(TAG, "Package name not found", e);
}
return id;
} else {
//Try meta data of package
Bundle md = null;
try {
md = context.getPackageManager().getApplicationInfo(
packagename, PackageManager.GET_META_DATA).metaData;
} catch (NameNotFoundException e) {
Log.e(TAG, "Package name not found", e);
}
if (md != null) {
// Obtain resource ID and convert to resource name:
int id = md.getInt(metadata);
return id;
} else {
return 0;
}
}
}
}