package loon.apk.shell; import android.app.Activity; import android.app.Application; import android.app.FragmentManager; import android.app.Instrumentation; import android.os.Build; import android.os.Bundle; import android.view.KeyEvent; public class APKActivityControl implements APKActivityCallback { private Activity proxy; private Activity apk_object; private APKReflect proxyRef; private APKReflect apkRef; private Application app; private APKSetting setting; public APKActivityControl(Activity proxy, Activity apk_object,APKSetting set) { this(proxy, apk_object, null,null); } public APKActivityControl(Activity proxy, Activity apk_object, Application app,APKSetting set) { this.proxy = proxy; this.apk_object = apk_object; this.app = app; this.setting = set; this.proxyRef = APKReflect.in(proxy); this.apkRef = APKReflect.in(apk_object); } public void dispatchProxyToAPK() { try { apkRef.set("mDecor", proxyRef.get("mDecor")); apkRef.set("mTitleColor", proxyRef.get("mTitleColor")); apkRef.set("mWindowManager", proxyRef.get("mWindowManager")); apkRef.set("mWindow", proxy.getWindow()); apkRef.set("mManagedDialogs", proxyRef.get("mManagedDialogs")); apkRef.set("mCurrentConfig", proxyRef.get("mCurrentConfig")); apkRef.set("mSearchManager", proxyRef.get("mSearchManager")); apkRef.set("mMenuInflater", proxyRef.get("mMenuInflater")); apkRef.set("mConfigChangeFlags", proxyRef.get("mConfigChangeFlags")); apkRef.set("mIntent", proxyRef.get("mIntent")); apkRef.set("mToken", proxyRef.get("mToken")); Instrumentation instrumentation = proxyRef.get("mInstrumentation"); apkRef.set("mInstrumentation", new APKInstrumentObject( instrumentation,setting)); apkRef.set("mMainThread", proxyRef.get("mMainThread")); apkRef.set("mEmbeddedID", proxyRef.get("mEmbeddedID")); apkRef.set("mApplication", app == null ? proxy.getApplication() : app); apkRef.set("mComponent", proxyRef.get("mComponent")); apkRef.set("mActivityInfo", proxyRef.get("mActivityInfo")); apkRef.set("mAllLoaderManagers", proxyRef.get("mAllLoaderManagers")); apkRef.set("mLoaderManager", proxyRef.get("mLoaderManager")); if (Build.VERSION.SDK_INT >= 13) { FragmentManager mFragments = proxy.getFragmentManager(); apkRef.set("mFragments", mFragments); apkRef.set("mContainer", proxyRef.get("mContainer")); } if (Build.VERSION.SDK_INT >= 12) { apkRef.set("mActionBar", proxyRef.get("mActionBar")); } apkRef.set("mUiThread", proxyRef.get("mUiThread")); apkRef.set("mHandler", proxyRef.get("mHandler")); apkRef.set("mInstanceTracker", proxyRef.get("mInstanceTracker")); apkRef.set("mTitle", proxyRef.get("mTitle")); apkRef.set("mResultData", proxyRef.get("mResultData")); apkRef.set("mDefaultKeySsb", proxyRef.get("mDefaultKeySsb")); apk_object.getWindow().setCallback(apk_object); } catch (Exception e) { } } public Activity getAPK() { return apk_object; } public void setAPK(Activity a) { this.apk_object = a; this.proxyRef = APKReflect.in(a); } public Activity getProxy() { return proxy; } public void setProxy(Activity proxy) { this.proxy = proxy; proxyRef = APKReflect.in(proxy); } public APKReflect getProxyRef() { return proxyRef; } public APKReflect getAPKRef() { return apkRef; } @Override public void runOnCreate(Bundle saveInstance) { try { getAPKRef().call("onCreate", saveInstance); } catch (Exception e) { e.printStackTrace(); } } @Override public void runOnStart() { try { getAPKRef().call("onStart"); } catch (Exception e) { e.printStackTrace(); } } @Override public void runOnResume() { try { getAPKRef().call("onResume"); } catch (Exception e) { e.printStackTrace(); } } @Override public void runOnDestroy() { try { getAPKRef().call("onDestroy"); } catch (Exception e) { e.printStackTrace(); } } @Override public void runOnStop() { try { getAPKRef().call("onStop"); } catch (Exception e) { e.printStackTrace(); } } @Override public void runOnRestart() { try { getAPKRef().call("onRestart"); } catch (Exception e) { e.printStackTrace(); } } @Override public void runOnSaveInstanceState(Bundle outState) { try { getAPKRef().call("onSaveInstanceState", outState); } catch (Exception e) { e.printStackTrace(); } } @Override public void runOnRestoreInstanceState(Bundle savedInstanceState) { try { getAPKRef().call("onRestoreInstanceState", savedInstanceState); } catch (Exception e) { e.printStackTrace(); } } @Override public void runOnPause() { try { getAPKRef().call("onStop"); } catch (Exception e) { e.printStackTrace(); } } @Override public void runOnBackPressed() { try { getAPKRef().call("onBackPressed"); } catch (Exception e) { e.printStackTrace(); } } @Override public boolean runOnKeyDown(int keyCode, KeyEvent event) { try { return getAPKRef().call("onKeyDown", keyCode, event).get(); } catch (Exception e) { e.printStackTrace(); } return false; } }