正在查看: Petal Maps v4.7.0.310001 应用的 HmsProxy.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: Petal Maps v4.7.0.310001 应用的 HmsProxy.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package com.huawei.hiassistant.platform.base.adapter.businessadapter;
import android.app.Activity;
import android.content.ContentProviderClient;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.text.TextUtils;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.huawei.hiassistant.platform.base.northinterface.Constants;
import com.huawei.hiassistant.platform.base.report.OperationReportUtils;
import com.huawei.hiassistant.platform.base.util.HmsListener;
import com.huawei.hiassistant.platform.base.util.IAssistantConfig;
import com.huawei.hiassistant.platform.base.util.KitLog;
import com.huawei.hiassistant.platform.base.util.SecurityComponentUtils;
import com.huawei.hmf.tasks.OnFailureListener;
import com.huawei.hmf.tasks.OnSuccessListener;
import com.huawei.hmf.tasks.Task;
import com.huawei.hms.common.ApiException;
import com.huawei.hms.support.account.AccountAuthManager;
import com.huawei.hms.support.account.request.AccountAuthParams;
import com.huawei.hms.support.account.request.AccountAuthParamsHelper;
import com.huawei.hms.support.account.result.AuthAccount;
import com.huawei.hms.support.api.entity.auth.Scope;
import com.huawei.hms.support.hwid.HuaweiIdAuthManager;
import com.huawei.hms.support.hwid.request.HuaweiIdAuthParams;
import com.huawei.hms.support.hwid.request.HuaweiIdAuthParamsHelper;
import com.huawei.hms.support.hwid.result.AuthHuaweiId;
import com.huawei.hms.support.hwid.service.HuaweiIdAuthService;
import java.util.ArrayList;
import java.util.Optional;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
class HmsProxy implements HmsAdapter {
private static final int ERROR_CODE_HMS_VERSION = 907135003;
private static final long FIRST_LOGIN_TIMEOUT = 2;
private static final long GET_UID_TIMEOUT = 5;
private static final String HMS_API_URI = "content://com.huawei.hwid.api.provider/";
private static final String HMS_WATCH_API_URI = "content://com.huawei.hms.contentprovider/com.huawei.hwid.api.provider/";
private static final String HWID = "com.huawei.hwid";
private static final String PACKAGE_NAME_HEAD = "com.huawei";
private static final int REQUEST_API_HMS_APK_VERSION_MIN = 40000300;
private static final String TAG = "HmsProxy";
private HuaweiIdAuthParams cloudAuthParam;
private volatile boolean isGettingAccessInfo;
private HuaweiIdAuthParams localAuthParam;
private static final Scope SCOPE_SMARTHOME_SKILL = new Scope("https://smarthome.com/auth/smarthome/skill");
private static final Scope SCOPE_SMARTHOME_DEVICES = new Scope("https://smarthome.com/auth/smarthome/devices");
private static final Scope SCOPE_ACCOUNT = new Scope("https://www.huawei.com/auth/account/account.flags");
private String accessToken = "";
private String uid = "";
private boolean isNeedUpgrade = false;
private final Object lockForGetAccessInfo = new Object();
private volatile boolean isAllowRequestInfo = true;
public HmsProxy() {
Context appContext = IAssistantConfig.getInstance().getAppContext();
if (appContext != null && !appContext.getPackageName().startsWith(PACKAGE_NAME_HEAD)) {
KitLog.info(TAG, "non-huawei pkg");
HuaweiIdAuthParams huaweiIdAuthParams = HuaweiIdAuthParams.DEFAULT_AUTH_REQUEST_PARAM;
this.cloudAuthParam = new HuaweiIdAuthParamsHelper(huaweiIdAuthParams).setIdToken().setAccessToken().createParams();
this.localAuthParam = new HuaweiIdAuthParamsHelper(huaweiIdAuthParams).setIdToken().createParams();
return;
}
KitLog.info(TAG, "huawei pkg");
ArrayList arrayList = new ArrayList();
arrayList.add(SCOPE_SMARTHOME_SKILL);
arrayList.add(SCOPE_SMARTHOME_DEVICES);
Scope scope = SCOPE_ACCOUNT;
arrayList.add(scope);
HuaweiIdAuthParams huaweiIdAuthParams2 = HuaweiIdAuthParams.DEFAULT_AUTH_REQUEST_PARAM;
this.cloudAuthParam = new HuaweiIdAuthParamsHelper(huaweiIdAuthParams2).setIdToken().setScopeList(arrayList).setAccessToken().setUid().createParams();
ArrayList arrayList2 = new ArrayList();
arrayList2.add(scope);
this.localAuthParam = new HuaweiIdAuthParamsHelper(huaweiIdAuthParams2).setIdToken().setScopeList(arrayList2).setUid().createParams();
}
private Optional<ContentProviderClient> acquireProviderClient(Context context, Uri uri) {
if (SecurityComponentUtils.isValidUri(uri)) {
return Optional.ofNullable(context.getContentResolver().acquireUnstableContentProviderClient(uri));
}
KitLog.warn(TAG, "uri invalid");
return Optional.empty();
}
public Optional<AuthHuaweiIdConversion> getConversionObject(AuthHuaweiId authHuaweiId) {
if (authHuaweiId == null) {
return Optional.empty();
}
KitLog.info(TAG, "async AT empty? " + TextUtils.isEmpty(authHuaweiId.getAccessToken()) + ", async uid empty? " + TextUtils.isEmpty(authHuaweiId.getUid()));
AuthHuaweiIdConversion authHuaweiIdConversion = new AuthHuaweiIdConversion();
authHuaweiIdConversion.setAccessToken(authHuaweiId.getAccessToken());
authHuaweiIdConversion.setUid(authHuaweiId.getUid());
return Optional.of(authHuaweiIdConversion);
}
private boolean isNeedUpgradeHms(Context context) {
if (context == null) {
KitLog.warn(TAG, "context is null");
return false;
}
try {
PackageInfo packageInfo = context.getPackageManager().getPackageInfo("com.huawei.hwid", 0);
KitLog.debug(TAG, "pkg: {}, versionName: {}, versionCode: {}", "com.huawei.hwid", packageInfo.versionName, Integer.valueOf(packageInfo.versionCode));
return packageInfo.versionCode < REQUEST_API_HMS_APK_VERSION_MIN;
} catch (PackageManager.NameNotFoundException | RuntimeException unused) {
KitLog.error(TAG, "NameNotFoundException");
return false;
}
}
public static void lambda$getAuthCode$2(HmsListener hmsListener, long j, AuthAccount authAccount) {
KitLog.info(TAG, "getAuthCode end, isEmpty? " + TextUtils.isEmpty(authAccount.getAuthorizationCode()));
AuthHuaweiIdConversion authHuaweiIdConversion = new AuthHuaweiIdConversion();
authHuaweiIdConversion.setAuthCode(authAccount.getAuthorizationCode());
hmsListener.onSuccess(Optional.of(authHuaweiIdConversion));
OperationReportUtils.getInstance().reportGetAuthCodeEvent(System.currentTimeMillis() - j, "0");
}
public static void lambda$getAuthCode$3(HmsListener hmsListener, long j, Exception exc) {
if (exc instanceof ApiException) {
KitLog.info(TAG, "getAuthCode failed status:" + ((ApiException) exc).getStatusCode());
hmsListener.onFail();
}
OperationReportUtils.getInstance().reportGetAuthCodeEvent(System.currentTimeMillis() - j, "1");
}
public void lambda$requestAccessInfo$0(Context context, CountDownLatch countDownLatch, Exception exc) {
KitLog.warn(TAG, "requestAccessInfo fail.");
resetAccessInfoValue();
onAuthTaskFailure(exc, context);
countDownLatch.countDown();
}
public void lambda$requestAccessInfo$1(CountDownLatch countDownLatch, AuthHuaweiId authHuaweiId) {
KitLog.info(TAG, "requestAccessInfo onSuccess");
this.accessToken = authHuaweiId.getAccessToken();
this.uid = authHuaweiId.getUid();
this.isNeedUpgrade = false;
countDownLatch.countDown();
}
private JsonObject makeAccessInfoJson() {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty(Constants.UserData.HUAWEI_AT, this.accessToken);
String str = this.uid;
if (str == null) {
str = "";
}
jsonObject.addProperty("uid", str);
if (this.isNeedUpgrade) {
KitLog.info(TAG, "NeedUpgrade");
jsonObject.addProperty("isNeedUpgrade", Boolean.valueOf(this.isNeedUpgrade));
jsonObject.addProperty("packageName", "com.huawei.hwid");
}
return jsonObject;
}
private void onAuthTaskFailure(Exception exc, Context context) {
if (exc instanceof ApiException) {
int statusCode = ((ApiException) exc).getStatusCode();
KitLog.info(TAG, "StatusCode is:" + statusCode);
if (statusCode == 907135003) {
this.isNeedUpgrade = isNeedUpgradeHms(context);
}
}
}
private JsonObject requestAccessInfo(final Context context, String str, HuaweiIdAuthParams huaweiIdAuthParams, long j) {
HuaweiIdAuthService service;
this.isGettingAccessInfo = true;
if (!this.isAllowRequestInfo) {
KitLog.info(TAG, "requestAccessInfo onfail, allowRequestInfo is false");
resetAccessInfoValue();
return makeAccessInfoJson();
}
if (context instanceof Activity) {
KitLog.info(TAG, "requestAccessInfo with activity");
service = HuaweiIdAuthManager.getService((Activity) context, huaweiIdAuthParams);
} else {
service = HuaweiIdAuthManager.getService(context, huaweiIdAuthParams);
}
if (service == null) {
resetAccessInfoValue();
return makeAccessInfoJson();
}
Task silentSignIn = service.silentSignIn();
if (silentSignIn == null) {
resetAccessInfoValue();
return makeAccessInfoJson();
}
final CountDownLatch countDownLatch = new CountDownLatch(1);
silentSignIn.addOnFailureListener(new OnFailureListener() {
@Override
public final void onFailure(Exception exc) {
HmsProxy.this.lambda$requestAccessInfo$0(context, countDownLatch, exc);
}
}).addOnSuccessListener(new OnSuccessListener() {
@Override
public final void onSuccess(Object obj) {
HmsProxy.this.lambda$requestAccessInfo$1(countDownLatch, (AuthHuaweiId) obj);
}
});
try {
countDownLatch.await(j, TimeUnit.SECONDS);
} catch (InterruptedException unused) {
KitLog.error(TAG, "lock error");
}
KitLog.info(TAG, "request type= " + str + ", AT empty? " + TextUtils.isEmpty(this.accessToken) + ", uid empty? " + TextUtils.isEmpty(this.uid));
this.isGettingAccessInfo = false;
return makeAccessInfoJson();
}
private void resetAccessInfoValue() {
this.accessToken = "";
this.uid = "";
this.isNeedUpgrade = false;
}
public void sendFailResultCallback(HmsListener hmsListener) {
if (hmsListener != null) {
hmsListener.onFail();
}
}
@Override
public String getAccountUidSync(Context context) {
KitLog.info(TAG, "getAccountUidSync start");
long currentTimeMillis = System.currentTimeMillis();
JsonElement jsonElement = requestAccessInfo(context, "local", this.localAuthParam, GET_UID_TIMEOUT).get("uid");
String asString = jsonElement != null ? jsonElement.getAsString() : null;
KitLog.info(TAG, "getAccountUidSync end, cost: " + (System.currentTimeMillis() - currentTimeMillis));
return asString;
}
@Override
public void getAuthCode(Context context, final HmsListener hmsListener) {
KitLog.info(TAG, "getAuthCode start.");
final long currentTimeMillis = System.currentTimeMillis();
ArrayList arrayList = new ArrayList();
arrayList.add(SCOPE_ACCOUNT);
AccountAuthManager.getService(context, new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setAuthorizationCode().setScopeList(arrayList).createParams()).silentSignIn().addOnSuccessListener(new OnSuccessListener() {
@Override
public final void onSuccess(Object obj) {
HmsProxy.lambda$getAuthCode$2(HmsListener.this, currentTimeMillis, (AuthAccount) obj);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public final void onFailure(Exception exc) {
HmsProxy.lambda$getAuthCode$3(HmsListener.this, currentTimeMillis, exc);
}
});
}
@Override
public Optional<AuthHuaweiIdConversion> getCacheAuthInfo() {
if (TextUtils.isEmpty(this.accessToken) || TextUtils.isEmpty(this.uid)) {
KitLog.warn(TAG, "token or uid is empty");
return Optional.empty();
}
AuthHuaweiIdConversion authHuaweiIdConversion = new AuthHuaweiIdConversion();
authHuaweiIdConversion.setAccessToken(this.accessToken);
authHuaweiIdConversion.setUid(this.uid);
return Optional.ofNullable(authHuaweiIdConversion);
}
@Override
public boolean getLoginStatus(android.content.Context r10) {
throw new UnsupportedOperationException("Method not decompiled: com.huawei.hiassistant.platform.base.adapter.businessadapter.HmsProxy.getLoginStatus(android.content.Context):boolean");
}
@Override
public void requestAccessInfoAsynchronous(Context context, final HmsListener hmsListener) {
HuaweiIdAuthService service;
if (!this.isAllowRequestInfo) {
KitLog.info(TAG, "requestAccessInfoAsynchronous onfail, allowRequestInfo is false");
sendFailResultCallback(hmsListener);
return;
}
if (context instanceof Activity) {
KitLog.info(TAG, "requestAccessInfoAsynchronous with activity");
service = HuaweiIdAuthManager.getService((Activity) context, this.cloudAuthParam);
} else {
service = HuaweiIdAuthManager.getService(context, this.cloudAuthParam);
}
if (service == null) {
sendFailResultCallback(hmsListener);
return;
}
Task silentSignIn = service.silentSignIn();
if (silentSignIn == null) {
sendFailResultCallback(hmsListener);
} else {
KitLog.debug(TAG, "silentSignIn end", new Object[0]);
silentSignIn.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception exc) {
KitLog.warn(HmsProxy.TAG, "requestAccessInfoAsynchronous fail.");
HmsProxy.this.sendFailResultCallback(hmsListener);
}
}).addOnSuccessListener(new OnSuccessListener<AuthHuaweiId>() {
@Override
public void onSuccess(AuthHuaweiId authHuaweiId) {
KitLog.info(HmsProxy.TAG, "requestAccessInfoAsynchronous success");
HmsListener hmsListener2 = hmsListener;
if (hmsListener2 != null) {
hmsListener2.onSuccess(HmsProxy.this.getConversionObject(authHuaweiId));
}
}
});
}
}
@Override
public JsonObject requestAccessInfoSynchronize(Context context) {
JsonObject requestAccessInfo;
JsonObject makeAccessInfoJson;
KitLog.info(TAG, "requestAccessInfoSynchronize");
if (this.isGettingAccessInfo) {
synchronized (this.lockForGetAccessInfo) {
makeAccessInfoJson = makeAccessInfoJson();
}
return makeAccessInfoJson;
}
synchronized (this.lockForGetAccessInfo) {
requestAccessInfo = requestAccessInfo(context, "cloud", this.cloudAuthParam, FIRST_LOGIN_TIMEOUT);
}
return requestAccessInfo;
}
@Override
public void requestLogin(Activity activity, int i) {
KitLog.info(TAG, "requestLogin");
if (activity == null) {
KitLog.warn(TAG, "activity is null");
return;
}
HuaweiIdAuthService service = HuaweiIdAuthManager.getService(activity, this.cloudAuthParam);
if (service != null) {
Intent signInIntent = service.getSignInIntent();
signInIntent.setPackage("com.huawei.hwid");
activity.startActivityForResult(signInIntent, i);
}
}
@Override
public void setAllowRequestHwInfo(boolean z) {
this.isAllowRequestInfo = z;
}
}