discord-jadx/app/src/main/java/androidx/sharetarget/ShareTargetXmlParser.java

138 lines
6.4 KiB
Java

package androidx.sharetarget;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ResolveInfo;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.util.Log;
import androidx.annotation.RestrictTo;
import androidx.annotation.WorkerThread;
import androidx.sharetarget.ShareTargetCompat;
import c.d.b.a.a;
import java.util.ArrayList;
import java.util.List;
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
public class ShareTargetXmlParser {
private static final String ATTR_HOST = "host";
private static final String ATTR_MIME_TYPE = "mimeType";
private static final String ATTR_NAME = "name";
private static final String ATTR_PATH = "path";
private static final String ATTR_PATH_PATTERN = "pathPattern";
private static final String ATTR_PATH_PREFIX = "pathPrefix";
private static final String ATTR_PORT = "port";
private static final String ATTR_SCHEME = "scheme";
private static final String ATTR_TARGET_CLASS = "targetClass";
private static final Object GET_INSTANCE_LOCK = new Object();
private static final String META_DATA_APP_SHORTCUTS = "android.app.shortcuts";
public static final String TAG = "ShareTargetXmlParser";
private static final String TAG_CATEGORY = "category";
private static final String TAG_DATA = "data";
private static final String TAG_SHARE_TARGET = "share-target";
private static volatile ArrayList<ShareTargetCompat> sShareTargets;
private ShareTargetXmlParser() {
}
private static String getAttributeValue(XmlResourceParser xmlResourceParser, String str) {
String attributeValue = xmlResourceParser.getAttributeValue("http://schemas.android.com/apk/res/android", str);
return attributeValue == null ? xmlResourceParser.getAttributeValue(null, str) : attributeValue;
}
@WorkerThread
public static ArrayList<ShareTargetCompat> getShareTargets(Context context) {
if (sShareTargets == null) {
synchronized (GET_INSTANCE_LOCK) {
if (sShareTargets == null) {
sShareTargets = parseShareTargets(context);
}
}
}
return sShareTargets;
}
private static XmlResourceParser getXmlResourceParser(Context context, ActivityInfo activityInfo) {
XmlResourceParser loadXmlMetaData = activityInfo.loadXmlMetaData(context.getPackageManager(), "android.app.shortcuts");
if (loadXmlMetaData != null) {
return loadXmlMetaData;
}
StringBuilder L = a.L("Failed to open android.app.shortcuts meta-data resource of ");
L.append(activityInfo.name);
throw new IllegalArgumentException(L.toString());
}
private static ShareTargetCompat parseShareTarget(XmlResourceParser xmlResourceParser) throws Exception {
String attributeValue = getAttributeValue(xmlResourceParser, "targetClass");
ArrayList arrayList = new ArrayList();
ArrayList arrayList2 = new ArrayList();
while (true) {
int next = xmlResourceParser.next();
if (next != 1) {
if (next != 2) {
if (next == 3 && xmlResourceParser.getName().equals("share-target")) {
break;
}
} else {
String name = xmlResourceParser.getName();
name.hashCode();
if (name.equals("data")) {
arrayList.add(parseTargetData(xmlResourceParser));
} else if (name.equals("category")) {
arrayList2.add(getAttributeValue(xmlResourceParser, "name"));
}
}
} else {
break;
}
}
if (arrayList.isEmpty() || attributeValue == null || arrayList2.isEmpty()) {
return null;
}
return new ShareTargetCompat((ShareTargetCompat.TargetData[]) arrayList.toArray(new ShareTargetCompat.TargetData[arrayList.size()]), attributeValue, (String[]) arrayList2.toArray(new String[arrayList2.size()]));
}
private static ArrayList<ShareTargetCompat> parseShareTargets(Context context) {
ArrayList<ShareTargetCompat> arrayList = new ArrayList<>();
Intent intent = new Intent("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
intent.setPackage(context.getPackageName());
List<ResolveInfo> queryIntentActivities = context.getPackageManager().queryIntentActivities(intent, 128);
if (queryIntentActivities == null) {
return arrayList;
}
for (ResolveInfo resolveInfo : queryIntentActivities) {
ActivityInfo activityInfo = resolveInfo.activityInfo;
Bundle bundle = activityInfo.metaData;
if (bundle != null && bundle.containsKey("android.app.shortcuts")) {
arrayList.addAll(parseShareTargets(context, activityInfo));
}
}
return arrayList;
}
private static ArrayList<ShareTargetCompat> parseShareTargets(Context context, ActivityInfo activityInfo) {
ShareTargetCompat parseShareTarget;
ArrayList<ShareTargetCompat> arrayList = new ArrayList<>();
XmlResourceParser xmlResourceParser = getXmlResourceParser(context, activityInfo);
while (true) {
try {
int next = xmlResourceParser.next();
if (next == 1) {
break;
} else if (next == 2 && xmlResourceParser.getName().equals("share-target") && (parseShareTarget = parseShareTarget(xmlResourceParser)) != null) {
arrayList.add(parseShareTarget);
}
} catch (Exception e) {
Log.e("ShareTargetXmlParser", "Failed to parse the Xml resource: ", e);
}
}
xmlResourceParser.close();
return arrayList;
}
private static ShareTargetCompat.TargetData parseTargetData(XmlResourceParser xmlResourceParser) {
return new ShareTargetCompat.TargetData(getAttributeValue(xmlResourceParser, "scheme"), getAttributeValue(xmlResourceParser, "host"), getAttributeValue(xmlResourceParser, "port"), getAttributeValue(xmlResourceParser, "path"), getAttributeValue(xmlResourceParser, "pathPattern"), getAttributeValue(xmlResourceParser, "pathPrefix"), getAttributeValue(xmlResourceParser, "mimeType"));
}
}