Craftsman 4 v1.20.43版本的 MD5 值为:44824ed1b4bf939cc4a771f5f317f768
以下内容为反编译后的 BrowserSelector.java 源代码,内容仅作参考
package com.microsoft.xal.browser;
import android.content.Context;
import android.content.Intent;
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.util.Base64;
import com.microsoft.xal.browser.BrowserSelectionResult;
import com.microsoft.xal.logging.XalLogger;
import com.safedk.android.analytics.AppLovinBridge;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
public class BrowserSelector {
private static final Map<String, String> customTabsAllowedBrowsers;
static {
HashMap hashMap = new HashMap();
customTabsAllowedBrowsers = hashMap;
hashMap.put("com.android.chrome", "OJGKRT0HGZNU+LGa8F7GViztV4g=");
hashMap.put("org.mozilla.firefox", "kg9Idqale0pqL0zK9l99Kc4m/yw=");
hashMap.put("com.microsoft.emmx", "P2QOJ59jvOpxCCrn6MfvotoBTK0=");
hashMap.put("com.sec.android.app.sbrowser", "nKUXDzgZGd/gRG/NqxixmhQ7MWM=");
}
public static BrowserSelectionResult selectBrowser(Context context, boolean z) {
String str;
XalLogger xalLogger = new XalLogger("BrowserSelector");
try {
BrowserSelectionResult.BrowserInfo userDefaultBrowserInfo = userDefaultBrowserInfo(context, xalLogger);
boolean z2 = false;
if (z) {
str = "inProcRequested";
} else if (browserInfoImpliesNoUserDefault(userDefaultBrowserInfo)) {
str = "noDefault";
} else {
String str2 = userDefaultBrowserInfo.packageName;
if (!browserSupportsCustomTabs(context, str2)) {
xalLogger.Important("selectBrowser() Default browser does not support custom tabs.");
str = "CTNotSupported";
} else if (!browserAllowedForCustomTabs(context, xalLogger, str2)) {
xalLogger.Important("selectBrowser() Default browser supports custom tabs, but is not allowed.");
str = "CTSupportedButNotAllowed";
} else {
xalLogger.Important("selectBrowser() Default browser supports custom tabs and is allowed.");
str = "CTSupportedAndAllowed";
z2 = true;
}
}
BrowserSelectionResult browserSelectionResult = new BrowserSelectionResult(userDefaultBrowserInfo, str, z2);
xalLogger.close();
return browserSelectionResult;
} catch (Throwable th) {
try {
throw th;
} catch (Throwable th2) {
if (th != null) {
try {
xalLogger.close();
} catch (Throwable th3) {
th.addSuppressed(th3);
}
} else {
xalLogger.close();
}
throw th2;
}
}
}
private static BrowserSelectionResult.BrowserInfo userDefaultBrowserInfo(Context context, XalLogger xalLogger) {
String str;
ResolveInfo resolveActivity = context.getPackageManager().resolveActivity(new Intent("android.intent.action.VIEW", Uri.parse("https://microsoft.com")), 65536);
String str2 = resolveActivity == null ? null : resolveActivity.activityInfo.packageName;
if (str2 == null) {
xalLogger.Important("userDefaultBrowserInfo() No default browser resolved.");
return new BrowserSelectionResult.BrowserInfo("none", 0, "none");
} else if (str2.equals(AppLovinBridge.f5626g)) {
xalLogger.Important("userDefaultBrowserInfo() System resolved as default browser.");
return new BrowserSelectionResult.BrowserInfo(AppLovinBridge.f5626g, 0, "none");
} else {
int i2 = -1;
try {
PackageInfo packageInfo = context.getPackageManager().getPackageInfo(str2, 0);
i2 = packageInfo.versionCode;
str = packageInfo.versionName;
} catch (PackageManager.NameNotFoundException e2) {
xalLogger.Error("userDefaultBrowserInfo() Error in getPackageInfo(): " + e2);
str = "unknown";
}
xalLogger.Important("userDefaultBrowserInfo() Found " + str2 + " as user's default browser.");
return new BrowserSelectionResult.BrowserInfo(str2, i2, str);
}
}
private static boolean browserInfoImpliesNoUserDefault(BrowserSelectionResult.BrowserInfo browserInfo) {
return browserInfo.versionCode == 0 && browserInfo.versionName.equals("none");
}
private static boolean browserAllowedForCustomTabs(Context context, XalLogger xalLogger, String str) {
PackageInfo packageInfo;
String str2 = customTabsAllowedBrowsers.get(str);
if (str2 == null) {
return false;
}
try {
packageInfo = context.getPackageManager().getPackageInfo(str, 64);
} catch (PackageManager.NameNotFoundException e2) {
xalLogger.Error("browserAllowedForCustomTabs() Error in getPackageInfo(): " + e2);
} catch (NoSuchAlgorithmException e3) {
xalLogger.Error("browserAllowedForCustomTabs() Error in hashFromSignature(): " + e3);
}
if (packageInfo == null) {
xalLogger.Important("No package info found for package: " + str);
return false;
}
for (Signature signature : packageInfo.signatures) {
if (hashFromSignature(signature).equals(str2)) {
return true;
}
}
return false;
}
private static boolean browserSupportsCustomTabs(Context context, String str) {
for (ResolveInfo resolveInfo : context.getPackageManager().queryIntentServices(new Intent("android.support.customtabs.action.CustomTabsService"), 0)) {
if (resolveInfo.serviceInfo.packageName.equals(str)) {
return true;
}
}
return false;
}
private static String hashFromSignature(Signature signature) throws NoSuchAlgorithmException {
MessageDigest messageDigest = MessageDigest.getInstance("SHA");
messageDigest.update(signature.toByteArray());
return Base64.encodeToString(messageDigest.digest(), 2);
}
}