diff --git a/android/android_framework/base/src/main/java/github/tornaco/android/thanos/core/app/ThanosManagerNative.java b/android/android_framework/base/src/main/java/github/tornaco/android/thanos/core/app/ThanosManagerNative.java index fc58d76fe..fea0f574c 100644 --- a/android/android_framework/base/src/main/java/github/tornaco/android/thanos/core/app/ThanosManagerNative.java +++ b/android/android_framework/base/src/main/java/github/tornaco/android/thanos/core/app/ThanosManagerNative.java @@ -2,7 +2,10 @@ import static github.tornaco.android.thanos.core.app.ThanosManager.PROXIED_ANDROID_SERVICE_NAME; +import android.content.ClipData; +import android.content.ClipboardManager; import android.content.Context; +import android.content.Intent; import android.content.pm.ParceledListSlice; import android.os.Bundle; import android.os.IBinder; @@ -32,42 +35,66 @@ protected IThanos create() { return localService; } + // Solution 1 IThanos thanos = IThanos.Stub.asInterface( ServiceManager.getService(T.serviceInstallName())); if (thanos != null) { + XLog.w("ThanosManagerNative serviceInstallName Use it."); return thanos; } + // Solution 2 try { IAppWidgetService appWidgetService = IAppWidgetService.Stub.asInterface(ServiceManager.getService(Context.APPWIDGET_SERVICE)); ParceledListSlice list = appWidgetService.startListening(null, "thanox", 6, new int[]{2, 0, 2, 3}); - XLog.d("IAppWidgetService thanox list: " + list); + XLog.d("ThanosManagerNative IAppWidgetService thanox list: " + list); Bundle bundle = (Bundle) list.getList().get(0); IBinder thanox = bundle.getBinder("thanox-binder"); - XLog.d("IAppWidgetService thanox binder: " + thanox); + XLog.d("ThanosManagerNative IAppWidgetService thanox binder: " + thanox); thanos = IThanos.Stub.asInterface(thanox); if (thanos != null) { + XLog.w("ThanosManagerNative IAppWidgetService Use it."); return thanos; } } catch (Throwable e) { - XLog.e(e, "call IAppWidgetService"); + XLog.e(e, "ThanosManagerNativecall IAppWidgetService"); } + // Solution 3 + try { + ClipboardManager clipboardManager = (ClipboardManager) AppGlobals.getContext().getSystemService(Context.CLIPBOARD_SERVICE); + ClipData clipData = clipboardManager.getPrimaryClip(); + int clipCount = clipData.getItemCount(); + ClipData.Item lastItem = clipData.getItemAt(clipCount - 1); + Intent intent = lastItem.getIntent(); + Bundle bundle = intent.getBundleExtra("thanox-bundle"); + IBinder thanox = bundle.getBinder("thanox-binder"); + XLog.d("ThanosManagerNative ClipboardService thanox binder: " + thanox); + thanos = IThanos.Stub.asInterface(thanox); + if (thanos != null) { + XLog.w("ThanosManagerNative ClipboardService Use it."); + return thanos; + } + } catch (Throwable e) { + XLog.e(e, "ThanosManagerNative call ClipboardService"); + } + + // Solution 4 Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); try { IBinder backup = ServiceManager.getService(PROXIED_ANDROID_SERVICE_NAME); if (backup == null) { - XLog.w("Get Thanos from IPC_TRANS_CODE_THANOS_SERVER, service is null."); + XLog.w("ThanosManagerNative Get Thanos from IPC_TRANS_CODE_THANOS_SERVER, service is null."); return null; } data.writeInterfaceToken(IThanos.class.getName()); backup.transact(ThanosManager.IPC_TRANS_CODE_THANOS_SERVER, data, reply, 0); IBinder binder = reply.readStrongBinder(); - XLog.d("Get Thanos from IPC_TRANS_CODE_THANOS_SERVER: %s", binder); + XLog.w("ThanosManagerNative Get Thanos from IPC_TRANS_CODE_THANOS_SERVER: %s", binder); return IThanos.Stub.asInterface(binder); } catch (RemoteException e) { - XLog.e("Get Thanos from IPC_TRANS_CODE_THANOS_SERVER err", e); + XLog.e("ThanosManagerNative Get Thanos from IPC_TRANS_CODE_THANOS_SERVER err", e); } finally { data.recycle(); reply.recycle(); diff --git a/android/internal/Thanox-Internal b/android/internal/Thanox-Internal index 7e135955e..241e4451f 160000 --- a/android/internal/Thanox-Internal +++ b/android/internal/Thanox-Internal @@ -1 +1 @@ -Subproject commit 7e135955e251108790cf659375669191caec2b10 +Subproject commit 241e4451fb32927895bd8934746c6021e27aa486