blob: ed92cd321ee88432bd630dae39975ee1bd48f097 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.webapk.lib.common;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
/**
* Contains utility methods for interacting with WebAPKs.
*/
public class WebApkUtils {
/**
* Caches the value read from Application Metadata which specifies the host browser's package
* name.
*/
private static String sHostPackage;
/**
* Returns a Context for the host browser that was specified when building the WebAPK.
* @param context A context.
* @return The remote context. Returns null on an error.
*/
public static Context getHostBrowserContext(Context context) {
try {
String hostPackage = getHostBrowserPackageName(context);
return context.getApplicationContext().createPackageContext(
hostPackage,
Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return null;
}
/**
* Returns the package name for the host browser that was specified when building the WebAPK.
* @param context A context.
* @return The package name. Returns null on an error.
*/
public static String getHostBrowserPackageName(Context context) {
if (sHostPackage != null) return sHostPackage;
String hostPackage = null;
try {
ApplicationInfo ai = context.getPackageManager().getApplicationInfo(
context.getPackageName(), PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
hostPackage = bundle.getString("runtimeHost");
} catch (NameNotFoundException e) {
e.printStackTrace();
}
// Set {@link sHostPackage} to a non-null value so that the value is computed only once.
sHostPackage = hostPackage != null ? hostPackage : "";
return sHostPackage;
}
}