package org.bbs.apklauncher;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.bbs.apklauncher.ReflectUtil.ActivityReflectUtil;
import android.R.array;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Application;
import android.app.Fragment;
import android.app.Instrumentation;
import android.app.UiAutomation;
import android.content.ComponentName;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.PersistableBundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
/**
*
* inspired by {@link ContextWrapper}
*
* @author bysong
*
*/
public class InstrumentationWrapper extends Instrumentation {
private static final String TAG = InstrumentationWrapper.class.getSimpleName();
private static final boolean LOG_CALL = ApkLauncherConfig.DEBUG && true;
private Instrumentation mBase;
public InstrumentationWrapper(Instrumentation base){
mBase = base;
}
public Instrumentation getBase(){
return mBase;
}
// call base method instead.
@Override
public void onCreate(Bundle arguments) {
// TODO Auto-generated method stub
mBase.onCreate(arguments);
}
@Override
public void start() {
// TODO Auto-generated method stub
mBase.start();
}
@Override
public void onStart() {
// TODO Auto-generated method stub
mBase.onStart();
}
@Override
public boolean onException(Object obj, Throwable e) {
// TODO Auto-generated method stub
return mBase.onException(obj, e);
}
@Override
public void sendStatus(int resultCode, Bundle results) {
// TODO Auto-generated method stub
mBase.sendStatus(resultCode, results);
}
@Override
public void finish(int resultCode, Bundle results) {
// TODO Auto-generated method stub
mBase.finish(resultCode, results);
}
@Override
public void setAutomaticPerformanceSnapshots() {
// TODO Auto-generated method stub
mBase.setAutomaticPerformanceSnapshots();
}
@Override
public void startPerformanceSnapshot() {
// TODO Auto-generated method stub
mBase.startPerformanceSnapshot();
}
@Override
public void endPerformanceSnapshot() {
// TODO Auto-generated method stub
mBase.endPerformanceSnapshot();
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
mBase.onDestroy();
}
@Override
public Context getContext() {
// TODO Auto-generated method stub
return mBase.getContext();
}
@Override
public ComponentName getComponentName() {
// TODO Auto-generated method stub
return mBase.getComponentName();
}
@Override
public Context getTargetContext() {
// TODO Auto-generated method stub
return mBase.getTargetContext();
}
@Override
public boolean isProfiling() {
// TODO Auto-generated method stub
return mBase.isProfiling();
}
@Override
public void startProfiling() {
// TODO Auto-generated method stub
mBase.startProfiling();
}
@Override
public void stopProfiling() {
// TODO Auto-generated method stub
mBase.stopProfiling();
}
@Override
public void setInTouchMode(boolean inTouch) {
// TODO Auto-generated method stub
mBase.setInTouchMode(inTouch);
}
@Override
public void waitForIdle(Runnable recipient) {
// TODO Auto-generated method stub
mBase.waitForIdle(recipient);
}
@Override
public void waitForIdleSync() {
// TODO Auto-generated method stub
mBase.waitForIdleSync();
}
@Override
public void runOnMainSync(Runnable runner) {
// TODO Auto-generated method stub
mBase.runOnMainSync(runner);
}
@Override
public Activity startActivitySync(Intent intent) {
// TODO Auto-generated method stub
return mBase.startActivitySync(intent);
}
@Override
public void addMonitor(ActivityMonitor monitor) {
// TODO Auto-generated method stub
mBase.addMonitor(monitor);
}
@Override
public ActivityMonitor addMonitor(IntentFilter filter,
ActivityResult result, boolean block) {
// TODO Auto-generated method stub
return mBase.addMonitor(filter, result, block);
}
@Override
public ActivityMonitor addMonitor(String cls, ActivityResult result,
boolean block) {
// TODO Auto-generated method stub
return mBase.addMonitor(cls, result, block);
}
@Override
public boolean checkMonitorHit(ActivityMonitor monitor, int minHits) {
// TODO Auto-generated method stub
return mBase.checkMonitorHit(monitor, minHits);
}
@Override
public Activity waitForMonitor(ActivityMonitor monitor) {
// TODO Auto-generated method stub
return mBase.waitForMonitor(monitor);
}
@Override
public Activity waitForMonitorWithTimeout(ActivityMonitor monitor,
long timeOut) {
// TODO Auto-generated method stub
return mBase.waitForMonitorWithTimeout(monitor, timeOut);
}
@Override
public void removeMonitor(ActivityMonitor monitor) {
// TODO Auto-generated method stub
mBase.removeMonitor(monitor);
}
@Override
public boolean invokeMenuActionSync(Activity targetActivity, int id,
int flag) {
// TODO Auto-generated method stub
return mBase.invokeMenuActionSync(targetActivity, id, flag);
}
@Override
public boolean invokeContextMenuAction(Activity targetActivity, int id,
int flag) {
// TODO Auto-generated method stub
return mBase.invokeContextMenuAction(targetActivity, id, flag);
}
@Override
public void sendStringSync(String text) {
// TODO Auto-generated method stub
mBase.sendStringSync(text);
}
@Override
public void sendKeySync(KeyEvent event) {
// TODO Auto-generated method stub
mBase.sendKeySync(event);
}
@Override
public void sendKeyDownUpSync(int key) {
// TODO Auto-generated method stub
mBase.sendKeyDownUpSync(key);
}
@Override
public void sendCharacterSync(int keyCode) {
// TODO Auto-generated method stub
mBase.sendCharacterSync(keyCode);
}
@Override
public void sendPointerSync(MotionEvent event) {
// TODO Auto-generated method stub
mBase.sendPointerSync(event);
}
@Override
public void sendTrackballEventSync(MotionEvent event) {
// TODO Auto-generated method stub
mBase.sendTrackballEventSync(event);
}
@Override
public Application newApplication(ClassLoader cl, String className,
Context context) throws InstantiationException,
IllegalAccessException, ClassNotFoundException {
// TODO Auto-generated method stub
return mBase.newApplication(cl, className, context);
}
@Override
public void callApplicationOnCreate(Application app) {
// TODO Auto-generated method stub
mBase.callApplicationOnCreate(app);
}
@Override
public Activity newActivity(Class<?> clazz, Context context, IBinder token,
Application application, Intent intent, ActivityInfo info,
CharSequence title, Activity parent, String id,
Object lastNonConfigurationInstance) throws InstantiationException,
IllegalAccessException {
// TODO Auto-generated method stub
return mBase.newActivity(clazz, context, token, application, intent, info,
title, parent, id, lastNonConfigurationInstance);
}
@Override
public Activity newActivity(ClassLoader cl, String className, Intent intent)
throws InstantiationException, IllegalAccessException,
ClassNotFoundException {
// TODO Auto-generated method stub
return mBase.newActivity(cl, className, intent);
}
@Override
public void callActivityOnCreate(Activity activity, Bundle icicle) {
if (LOG_CALL) {
//----------123412341234123412341234123412341234123412341234
Log.d(TAG, "callActivityOnCreate(). activity: " + activity + " icicle: " + icicle);
}
mBase.callActivityOnCreate(activity, icicle);
}
@Override
public void callActivityOnCreate(Activity activity, Bundle icicle,
PersistableBundle persistentState) {
if (LOG_CALL) {
//----------123412341234123412341234123412341234123412341234
Log.d(TAG, "callActivityOnCreate(). activity: " + activity + " icicle: " + icicle
+ " persistentState: " + persistentState);
}
mBase.callActivityOnCreate(activity, icicle, persistentState);
}
@Override
public void callActivityOnDestroy(Activity activity) {
if (LOG_CALL) {
//----------123412341234123412341234123412341234123412341234
Log.d(TAG, "callActivityOnDestroy(). activity: " + activity);
}
mBase.callActivityOnDestroy(activity);
}
@Override
public void callActivityOnRestoreInstanceState(Activity activity,
Bundle savedInstanceState) {
if (LOG_CALL) {
//----------123412341234123412341234123412341234123412341234
Log.d(TAG, "callActivityOnRestoreInstanceState(). activity: " + activity
+ " savedInstanceState: " + savedInstanceState) ;
}
mBase.callActivityOnRestoreInstanceState(activity, savedInstanceState);
}
@Override
public void callActivityOnRestoreInstanceState(Activity activity,
Bundle savedInstanceState, PersistableBundle persistentState) {
if (LOG_CALL) {
//----------123412341234123412341234123412341234123412341234
Log.d(TAG, "callActivityOnRestoreInstanceState(). activity: " + activity
+ " savedInstanceState: " + savedInstanceState
+ " persistentState: " + persistentState) ;
}
mBase.callActivityOnRestoreInstanceState(activity, savedInstanceState,
persistentState);
}
@Override
public void callActivityOnPostCreate(Activity activity, Bundle icicle) {
if (LOG_CALL) {
//----------12341234123412341234123412341234123412341234
Log.d(TAG, "callActivityOnPostCreate(). activity: " + activity + " icicle: " + icicle);
}
mBase.callActivityOnPostCreate(activity, icicle);
}
@Override
public void callActivityOnPostCreate(Activity activity, Bundle icicle,
PersistableBundle persistentState) {
if (LOG_CALL) {
//----------12341234123412341234123412341234123412341234
Log.d(TAG, "callActivityOnPostCreate(). activity: " + activity + " icicle: " + icicle
+ " persistentState: " + persistentState);
}
mBase.callActivityOnPostCreate(activity, icicle, persistentState);
}
@Override
public void callActivityOnNewIntent(Activity activity, Intent intent) {
if (LOG_CALL) {
//----------12341234123412341234123412341234123412341234
Log.d(TAG, "callActivityOnNewIntent(). activity: " + activity
+ " intent: " + intent);
}
mBase.callActivityOnNewIntent(activity, intent);
}
@Override
public void callActivityOnStart(Activity activity) {
if (LOG_CALL) {
//----------12341234123412341234123412341234123412341234
Log.d(TAG, "callActivityOnStart(). activity: " + activity);
}
mBase.callActivityOnStart(activity);
}
@Override
public void callActivityOnRestart(Activity activity) {
if (LOG_CALL) {
//----------12341234123412341234123412341234123412341234
Log.d(TAG, "callActivityOnRestart(). activity: " + activity);
}
mBase.callActivityOnRestart(activity);
}
@Override
public void callActivityOnResume(Activity activity) {
if (LOG_CALL) {
//----------12341234123412341234123412341234123412341234
Log.d(TAG, "callActivityOnResume(). activity: " + activity);
}
mBase.callActivityOnResume(activity);
}
@Override
public void callActivityOnStop(Activity activity) {
if (LOG_CALL) {
//----------12341234123412341234123412341234123412341234
Log.d(TAG, "callActivityOnStop(). activity: " + activity);
}
mBase.callActivityOnStop(activity);
}
@Override
public void callActivityOnSaveInstanceState(Activity activity,
Bundle outState) {
if (LOG_CALL) {
//----------12341234123412341234123412341234123412341234
Log.d(TAG, "callActivityOnSaveInstanceState(). activity: " + activity
+ " outState: " + outState);
}
mBase.callActivityOnSaveInstanceState(activity, outState);
}
@Override
public void callActivityOnSaveInstanceState(Activity activity,
Bundle outState, PersistableBundle outPersistentState) {
if (LOG_CALL) {
//----------12341234123412341234123412341234123412341234
Log.d(TAG, "callActivityOnSaveInstanceState(). activity: " + activity
+ " outState: " + outState
+ " outPersistentState: " + outPersistentState);
}
mBase.callActivityOnSaveInstanceState(activity, outState, outPersistentState);
}
@Override
public void callActivityOnPause(Activity activity) {
if (LOG_CALL) {
//----------12341234123412341234123412341234123412341234
Log.d(TAG, "callActivityOnPause(). activity: " + activity);
}
mBase.callActivityOnPause(activity);
}
@Override
public void callActivityOnUserLeaving(Activity activity) {
if (LOG_CALL) {
Log.d(TAG, "callActivityOnUserLeaving(). activity: " + activity);
}
mBase.callActivityOnUserLeaving(activity);
}
@Override
public void startAllocCounting() {
// TODO Auto-generated method stub
mBase.startAllocCounting();
}
@Override
public void stopAllocCounting() {
// TODO Auto-generated method stub
mBase.stopAllocCounting();
}
@Override
public Bundle getAllocCounts() {
// TODO Auto-generated method stub
return mBase.getAllocCounts();
}
@Override
public Bundle getBinderCounts() {
// TODO Auto-generated method stub
return mBase.getBinderCounts();
}
@Override
public UiAutomation getUiAutomation() {
// TODO Auto-generated method stub
return mBase.getUiAutomation();
}
}