package com.openfarmanager.android.core.appmanager; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.net.Uri; import android.webkit.MimeTypeMap; import com.openfarmanager.android.App; import java.io.File; import java.util.List; /** * High level wrapper over <code>PackageManager</code>. * Provides additional functionality to deal with installed packages and file types. * * @see android.content.pm.PackageManager * @author Vlad Namashko */ public class AppManager { private PackageManager mPackageManager; public AppManager() { mPackageManager = App.sInstance.getPackageManager(); } /** * Extract extension and mime type from file name. Creates new intent (with ActionView) with extracted * data so android can find applications to handle this file. * * @param item item to be opened * @return filtered intent provided with mime type. */ public Intent getFilteredIntent(File item) { Uri uri = Uri.fromFile(item); String ext = MimeTypeMap.getFileExtensionFromUrl(uri.toString()); String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(uri, mime); return intent; } /** * Get activities which can handle current intent. * * @param intent to be handles. * @return list with information about activities. */ public List<ResolveInfo> getIntentActivities(Intent intent) { return mPackageManager.queryIntentActivities(intent, 0); } /** * Returns all activities which can handle any mime type. * * @param item item to be opened. * @return list with information about activities. */ public List<ResolveInfo> getAllCallableActivities(File item) { return getCallableActivities(item, "*/*"); } /** * Returns all activities which can handle requested mime type. * * @param item item to be opened * @param contentType content type which <code>item</code> must be opened with. * @return list with information about activities. */ public List<ResolveInfo> getCallableActivities(File item, String contentType) { return mPackageManager.queryIntentActivities( new Intent(Intent.ACTION_VIEW).setDataAndType(Uri.fromFile(item), contentType), 0); } }