382 lines
14 KiB
Java
382 lines
14 KiB
Java
package com.huawei.hms.api;
|
||
|
||
import android.app.Activity;
|
||
import android.content.ComponentName;
|
||
import android.content.Context;
|
||
import android.content.Intent;
|
||
import android.content.ServiceConnection;
|
||
import android.os.Handler;
|
||
import android.os.IBinder;
|
||
import android.os.Looper;
|
||
import android.os.Message;
|
||
import android.text.TextUtils;
|
||
import android.view.KeyEvent;
|
||
import com.huawei.hms.activity.BridgeActivity;
|
||
import com.huawei.hms.activity.IBridgeActivityDelegate;
|
||
import com.huawei.hms.api.FailedBinderCallBack;
|
||
import com.huawei.hms.common.internal.BindResolveClients;
|
||
import com.huawei.hms.support.log.HMSLog;
|
||
import com.huawei.hms.ui.AbstractDialog;
|
||
import com.huawei.hms.ui.AbstractPromptDialog;
|
||
import com.huawei.hms.utils.HMSPackageManager;
|
||
import com.huawei.hms.utils.ResourceLoaderUtil;
|
||
import com.huawei.hms.utils.UIUtil;
|
||
import com.huawei.hms.utils.Util;
|
||
|
||
/* loaded from: classes2.dex */
|
||
public class BindingFailedResolution implements IBridgeActivityDelegate, ServiceConnection {
|
||
private static final Object LOCK_CONNECT_TIMEOUT_HANDLER = new Object();
|
||
private static final int MSG_CONN_TIMEOUT = 2;
|
||
private static final int MSG_SELF_DESTROY_TIMEOUT = 3;
|
||
private static final int REQUEST_CODE = 2003;
|
||
private static final String TAG = "BindingFailedResolution";
|
||
private FailedBinderCallBack.BinderCallBack callBack;
|
||
private Activity curActivity;
|
||
private d promptdlg;
|
||
private boolean isStarting = true;
|
||
private Handler mConnectTimeoutHandler = null;
|
||
private Handler selfDestroyHandler = null;
|
||
|
||
/* JADX INFO: Access modifiers changed from: package-private */
|
||
/* loaded from: classes2.dex */
|
||
public class a implements Handler.Callback {
|
||
final BindingFailedResolution a;
|
||
|
||
a(BindingFailedResolution bindingFailedResolution) {
|
||
this.a = bindingFailedResolution;
|
||
}
|
||
|
||
@Override // android.os.Handler.Callback
|
||
public boolean handleMessage(Message message) {
|
||
if (message == null || message.what != 3) {
|
||
return false;
|
||
}
|
||
HMSLog.i(BindingFailedResolution.TAG, "selfDestroyHandle:MSG_SELF_DESTROY_TIMEOUT");
|
||
this.a.noticeBindFailed();
|
||
this.a.finishBridgeActivity(8);
|
||
return true;
|
||
}
|
||
}
|
||
|
||
/* JADX INFO: Access modifiers changed from: package-private */
|
||
/* loaded from: classes2.dex */
|
||
public class b implements Handler.Callback {
|
||
final BindingFailedResolution a;
|
||
|
||
b(BindingFailedResolution bindingFailedResolution) {
|
||
this.a = bindingFailedResolution;
|
||
}
|
||
|
||
@Override // android.os.Handler.Callback
|
||
public boolean handleMessage(Message message) {
|
||
if (message == null || message.what != 2) {
|
||
return false;
|
||
}
|
||
HMSLog.e(BindingFailedResolution.TAG, "In connect, bind core try timeout");
|
||
this.a.fireStartResult(false);
|
||
return true;
|
||
}
|
||
}
|
||
|
||
/* JADX INFO: Access modifiers changed from: package-private */
|
||
/* loaded from: classes2.dex */
|
||
public class c implements AbstractDialog.Callback {
|
||
final BindingFailedResolution a;
|
||
|
||
c(BindingFailedResolution bindingFailedResolution) {
|
||
this.a = bindingFailedResolution;
|
||
}
|
||
|
||
@Override // com.huawei.hms.ui.AbstractDialog.Callback
|
||
public void onCancel(AbstractDialog abstractDialog) {
|
||
this.a.promptdlg = null;
|
||
BindResolveClients.getInstance().unRegisterAll();
|
||
this.a.finishBridgeActivity(8);
|
||
}
|
||
|
||
@Override // com.huawei.hms.ui.AbstractDialog.Callback
|
||
public void onDoWork(AbstractDialog abstractDialog) {
|
||
this.a.promptdlg = null;
|
||
BindResolveClients.getInstance().unRegisterAll();
|
||
this.a.finishBridgeActivity(8);
|
||
}
|
||
}
|
||
|
||
/* JADX INFO: Access modifiers changed from: package-private */
|
||
/* loaded from: classes2.dex */
|
||
public static class d extends AbstractPromptDialog {
|
||
private d() {
|
||
}
|
||
|
||
@Override // com.huawei.hms.ui.AbstractDialog
|
||
public String onGetMessageString(Context context) {
|
||
String appName = Util.getAppName(context, null);
|
||
String appName2 = Util.getAppName(context, HMSPackageManager.getInstance(context).getHMSPackageNameForMultiService());
|
||
Object[] objArr = new Object[2];
|
||
objArr[0] = appName;
|
||
if (TextUtils.isEmpty(appName2)) {
|
||
appName2 = "com.huawei.hwid";
|
||
}
|
||
objArr[1] = appName2;
|
||
return ResourceLoaderUtil.getString("hms_bindfaildlg_message", objArr);
|
||
}
|
||
|
||
@Override // com.huawei.hms.ui.AbstractDialog
|
||
public String onGetPositiveButtonString(Context context) {
|
||
return ResourceLoaderUtil.getString("hms_confirm");
|
||
}
|
||
|
||
/* synthetic */ d(a aVar) {
|
||
this();
|
||
}
|
||
}
|
||
|
||
private void bindCoreService(boolean z) {
|
||
Activity activity = getActivity();
|
||
if (activity == null) {
|
||
HMSLog.e(TAG, "In connect, bind core try fail");
|
||
fireStartResult(false);
|
||
noticeBindResult(z, 8);
|
||
return;
|
||
}
|
||
Intent intent = new Intent(HMSPackageManager.getInstance(activity.getApplicationContext()).getServiceAction());
|
||
try {
|
||
String hMSPackageNameForMultiService = HMSPackageManager.getInstance(activity.getApplicationContext()).getHMSPackageNameForMultiService();
|
||
if (TextUtils.isEmpty(hMSPackageNameForMultiService)) {
|
||
HMSLog.e(TAG, "servicePackageName is empty, Service is invalid.");
|
||
fireStartResult(false);
|
||
noticeBindResult(z, 1);
|
||
return;
|
||
}
|
||
intent.setPackage(hMSPackageNameForMultiService);
|
||
synchronized (LOCK_CONNECT_TIMEOUT_HANDLER) {
|
||
if (activity.bindService(intent, this, 1)) {
|
||
postConnDelayHandle();
|
||
return;
|
||
}
|
||
HMSLog.e(TAG, "In connect, bind core try fail");
|
||
fireStartResult(false);
|
||
noticeBindResult(z, 8);
|
||
}
|
||
} catch (IllegalArgumentException unused) {
|
||
HMSLog.e(TAG, "IllegalArgumentException when bindCoreService intent.setPackage");
|
||
fireStartResult(false);
|
||
noticeBindResult(z, 8);
|
||
}
|
||
}
|
||
|
||
private void cancelConnDelayHandle() {
|
||
synchronized (LOCK_CONNECT_TIMEOUT_HANDLER) {
|
||
Handler handler = this.mConnectTimeoutHandler;
|
||
if (handler != null) {
|
||
handler.removeMessages(2);
|
||
this.mConnectTimeoutHandler = null;
|
||
}
|
||
}
|
||
}
|
||
|
||
/* JADX INFO: Access modifiers changed from: private */
|
||
public void finishBridgeActivity(int i) {
|
||
Activity activity = getActivity();
|
||
if (activity == null || activity.isFinishing()) {
|
||
return;
|
||
}
|
||
HMSLog.i(TAG, "finishBridgeActivity:".concat(String.valueOf(i)));
|
||
Intent intent = new Intent();
|
||
intent.putExtra(BridgeActivity.EXTRA_RESULT, i);
|
||
activity.setResult(-1, intent);
|
||
Util.unBindServiceCatchException(activity, this);
|
||
activity.finish();
|
||
}
|
||
|
||
private void showPromptdlg() {
|
||
Activity activity = getActivity();
|
||
if (activity == null || activity.isFinishing()) {
|
||
return;
|
||
}
|
||
d dVar = this.promptdlg;
|
||
if (dVar == null) {
|
||
this.promptdlg = new d(null);
|
||
} else {
|
||
dVar.dismiss();
|
||
}
|
||
HMSLog.i(TAG, "showPromptdlg to resolve conn error");
|
||
this.promptdlg.show(activity, new c(this));
|
||
}
|
||
|
||
private void tryStartHmsActivity(Activity activity) {
|
||
String hMSPackageNameForMultiService = HMSPackageManager.getInstance(activity.getApplicationContext()).getHMSPackageNameForMultiService();
|
||
if (TextUtils.isEmpty(hMSPackageNameForMultiService)) {
|
||
HMSLog.w(TAG, "servicePackageName is empty, Service is invalid.");
|
||
Handler handler = this.selfDestroyHandler;
|
||
if (handler != null) {
|
||
handler.removeMessages(3);
|
||
this.selfDestroyHandler = null;
|
||
}
|
||
bindCoreService(false);
|
||
return;
|
||
}
|
||
Intent intent = new Intent();
|
||
intent.putExtra("intent.extra.isfullscreen", UIUtil.isActivityFullscreen(activity));
|
||
intent.setClassName(hMSPackageNameForMultiService, HuaweiApiAvailability.ACTIVITY_NAME);
|
||
HMSLog.i(TAG, "onBridgeActivityCreate:try to start HMS");
|
||
try {
|
||
activity.startActivityForResult(intent, getRequestCode());
|
||
} catch (Throwable th) {
|
||
StringBuilder sb = new StringBuilder("ActivityNotFoundException:");
|
||
sb.append(th.getMessage());
|
||
HMSLog.e(TAG, sb.toString());
|
||
Handler handler2 = this.selfDestroyHandler;
|
||
if (handler2 != null) {
|
||
handler2.removeMessages(3);
|
||
this.selfDestroyHandler = null;
|
||
}
|
||
bindCoreService(false);
|
||
}
|
||
}
|
||
|
||
@Override // com.huawei.hms.activity.IBridgeActivityDelegate
|
||
public int getRequestCode() {
|
||
return 2003;
|
||
}
|
||
|
||
@Override // com.huawei.hms.activity.IBridgeActivityDelegate
|
||
public void onBridgeActivityCreate(Activity activity) {
|
||
if (activity == null) {
|
||
HMSLog.e(TAG, "activity is null");
|
||
selfDestroyHandle();
|
||
return;
|
||
}
|
||
if (activity.isFinishing()) {
|
||
HMSLog.e(TAG, "activity is finishing");
|
||
return;
|
||
}
|
||
Intent intent = activity.getIntent();
|
||
if (intent != null && intent.hasExtra(FailedBinderCallBack.CALLER_ID)) {
|
||
long j = 0;
|
||
try {
|
||
j = intent.getLongExtra(FailedBinderCallBack.CALLER_ID, 0L);
|
||
} catch (Exception e) {
|
||
StringBuilder sb = new StringBuilder("getExtras for callId exception:");
|
||
sb.append(e.getMessage());
|
||
HMSLog.e(TAG, sb.toString());
|
||
}
|
||
this.callBack = FailedBinderCallBack.getInstance().getCallBack(Long.valueOf(j));
|
||
}
|
||
this.curActivity = activity;
|
||
BindingFailedResolveMgr.b.a(activity);
|
||
selfDestroyHandle();
|
||
tryStartHmsActivity(activity);
|
||
}
|
||
|
||
@Override // com.huawei.hms.activity.IBridgeActivityDelegate
|
||
public void onBridgeActivityDestroy() {
|
||
cancelConnDelayHandle();
|
||
BindingFailedResolveMgr.b.b(this.curActivity);
|
||
this.curActivity = null;
|
||
}
|
||
|
||
@Override // com.huawei.hms.activity.IBridgeActivityDelegate
|
||
public boolean onBridgeActivityResult(int i, int i2, Intent intent) {
|
||
if (i != getRequestCode()) {
|
||
return false;
|
||
}
|
||
HMSLog.i(TAG, "onBridgeActivityResult");
|
||
Handler handler = this.selfDestroyHandler;
|
||
if (handler != null) {
|
||
handler.removeMessages(3);
|
||
this.selfDestroyHandler = null;
|
||
}
|
||
bindCoreService(true);
|
||
return true;
|
||
}
|
||
|
||
@Override // com.huawei.hms.activity.IBridgeActivityDelegate
|
||
public void onKeyUp(int i, KeyEvent keyEvent) {
|
||
HMSLog.i(TAG, "On key up when resolve conn error");
|
||
}
|
||
|
||
@Override // android.content.ServiceConnection
|
||
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
|
||
cancelConnDelayHandle();
|
||
fireStartResult(true);
|
||
if (getActivity() == null) {
|
||
return;
|
||
}
|
||
HMSLog.i(TAG, "test connect success, try to reConnect and reply message");
|
||
BindResolveClients.getInstance().notifyClientReconnect();
|
||
}
|
||
|
||
@Override // android.content.ServiceConnection
|
||
public void onServiceDisconnected(ComponentName componentName) {
|
||
}
|
||
|
||
protected void onStartResult(boolean z) {
|
||
if (getActivity() == null) {
|
||
return;
|
||
}
|
||
if (z) {
|
||
finishBridgeActivity(0);
|
||
} else {
|
||
showPromptdlg();
|
||
}
|
||
}
|
||
|
||
/* JADX INFO: Access modifiers changed from: private */
|
||
public void noticeBindFailed() {
|
||
FailedBinderCallBack.BinderCallBack binderCallBack = this.callBack;
|
||
if (binderCallBack != null) {
|
||
binderCallBack.binderCallBack(8);
|
||
}
|
||
}
|
||
|
||
private void noticeBindResult(boolean z, int i) {
|
||
FailedBinderCallBack.BinderCallBack binderCallBack;
|
||
if (!z || (binderCallBack = this.callBack) == null) {
|
||
return;
|
||
}
|
||
binderCallBack.binderCallBack(i);
|
||
}
|
||
|
||
private void postConnDelayHandle() {
|
||
Handler handler = this.mConnectTimeoutHandler;
|
||
if (handler != null) {
|
||
handler.removeMessages(2);
|
||
} else {
|
||
this.mConnectTimeoutHandler = new Handler(Looper.getMainLooper(), new b(this));
|
||
}
|
||
this.mConnectTimeoutHandler.sendEmptyMessageDelayed(2, 5000L);
|
||
}
|
||
|
||
private void selfDestroyHandle() {
|
||
Handler handler = this.selfDestroyHandler;
|
||
if (handler != null) {
|
||
handler.removeMessages(3);
|
||
} else {
|
||
this.selfDestroyHandler = new Handler(Looper.getMainLooper(), new a(this));
|
||
}
|
||
this.selfDestroyHandler.sendEmptyMessageDelayed(3, 4000L);
|
||
}
|
||
|
||
/* JADX INFO: Access modifiers changed from: private */
|
||
public void fireStartResult(boolean z) {
|
||
if (this.isStarting) {
|
||
this.isStarting = false;
|
||
onStartResult(z);
|
||
}
|
||
}
|
||
|
||
@Override // com.huawei.hms.activity.IBridgeActivityDelegate
|
||
public void onBridgeConfigurationChanged() {
|
||
if (this.promptdlg == null) {
|
||
return;
|
||
}
|
||
HMSLog.i(TAG, "re show prompt dialog");
|
||
showPromptdlg();
|
||
}
|
||
|
||
protected Activity getActivity() {
|
||
return this.curActivity;
|
||
}
|
||
}
|