Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e8fa0253 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "Creating only a single activity trigger module"

parents f4c731ae 81dd8c09
Loading
Loading
Loading
Loading
+5 −18
Original line number Diff line number Diff line
/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
@@ -54,11 +54,6 @@ public class ActivityTrigger
        native_at_deinit();
    }

    /** &hide */
    public void activityStartProcessTrigger(String process, int pid) {
        native_at_startProcessActivity(process, pid);
    }

    /** &hide */
    public void activityStartTrigger(Intent intent, ActivityInfo acInfo, ApplicationInfo appInfo) {
        ComponentName cn = intent.getComponent();
@@ -106,14 +101,8 @@ public class ActivityTrigger
        native_at_stopActivity(activity);
    }

    /** &hide */
    public float animationScalesCheck(String activity, int scaleType) {
        return native_at_animationScalesCheck(activity, scaleType);
    }

    /** &hide */
    public void networkOptsCheck (int flag, int netType, String packageName) {
        native_at_networkOptsCheck(flag, netType, packageName);
    public float activityMiscTrigger(int func, String activity, int flag, int type) {
        return native_at_miscActivity(func, activity, flag, type);
    }

    private native int native_at_startActivity(String activity, int flags);
@@ -121,7 +110,5 @@ public class ActivityTrigger
    private native void native_at_pauseActivity(String activity);
    private native void native_at_stopActivity(String activity);
    private native void native_at_deinit();
    private native void native_at_startProcessActivity(String process, int pid);
    private native float native_at_animationScalesCheck(String activity, int scaleType);
    private native void native_at_networkOptsCheck(int flag, int netType, String packageName);
    private native float native_at_miscActivity(int func, String activity, int flag, int type);
}
+102 −184
Original line number Diff line number Diff line
/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
@@ -56,26 +56,20 @@ typedef struct dlLibHandler {
    void (*resumeActivity)(const char *);
    void (*pauseActivity)(const char *);
    void (*stopActivity)(const char *);
    void (*animationScalesCheck)(const char *, int, float *);
    void (*networkOptsCheck)(int, int, const char *);
    void (*init)(void);
    void (*deinit)(void);
    void (*startProcessActivity)(const char *, int);
    void (*miscActivity)(int, const char *, int, int, float *);
    const char *dlname;
}dlLibHandler;

/*
 * Array of dlhandlers
 * library -both handlers for Start and Resume events.
 * Init for activity trigger library
 */
static dlLibHandler mDlLibHandlers[] = {
    {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
     "ro.vendor.at_library"},
    {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
     "ro.vendor.gt_library"},
static dlLibHandler mDlLibHandler = {
    NULL, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, "ro.vendor.at_library"
};

static size_t gTotalNumLibs = 0;
// ----------------------------------------------------------------------------

static void
@@ -84,231 +78,158 @@ com_android_internal_app_ActivityTrigger_native_at_init()
    const char *rc;
    char buf[PROPERTY_VALUE_MAX];
    bool errored = false;
    size_t numlibs = 0;

    gTotalNumLibs = numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers);

    for(size_t i = 0; i < numlibs; i++) {
        errored = false;

    /* Retrieve name of vendor library */
        if (property_get(mDlLibHandlers[i].dlname, buf, NULL) <= 0) {
            continue;
    if (property_get(mDlLibHandler.dlname, buf, NULL) <= 0) {
        return;
    }

    /* Sanity check - ensure */
    buf[PROPERTY_VALUE_MAX-1] = '\0';
    if (strstr(buf, "/") != NULL) {
            continue;
        return;
    }

        mDlLibHandlers[i].dlhandle = dlopen(buf, RTLD_NOW | RTLD_LOCAL);
        if (mDlLibHandlers[i].dlhandle == NULL) {
            continue;
    mDlLibHandler.dlhandle = dlopen(buf, RTLD_NOW | RTLD_LOCAL);
    if (mDlLibHandler.dlhandle == NULL) {
        return;
    }

    dlerror();

        *(void **) (&mDlLibHandlers[i].startActivity) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_start");
        if ((rc = dlerror()) != NULL) {
            errored = true;
        }

        if (!errored) {
            *(void **) (&mDlLibHandlers[i].resumeActivity) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_resume");
    *(void **) (&mDlLibHandler.startActivity) = dlsym(mDlLibHandler.dlhandle, "activity_trigger_start");
    if ((rc = dlerror()) != NULL) {
        errored = true;
    }
        }
    if (!errored) {
            *(void **) (&mDlLibHandlers[i].pauseActivity) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_pause");
        *(void **) (&mDlLibHandler.resumeActivity) = dlsym(mDlLibHandler.dlhandle, "activity_trigger_resume");
        if ((rc = dlerror()) != NULL) {
            errored = true;
        }
    }
    if (!errored) {
            *(void **) (&mDlLibHandlers[i].stopActivity) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_stop");
        *(void **) (&mDlLibHandler.pauseActivity) = dlsym(mDlLibHandler.dlhandle, "activity_trigger_pause");
        if ((rc = dlerror()) != NULL) {
            errored = true;
        }
    }
    if (!errored) {
            *(void **) (&mDlLibHandlers[i].init) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_init");
        *(void **) (&mDlLibHandler.stopActivity) = dlsym(mDlLibHandler.dlhandle, "activity_trigger_stop");
        if ((rc = dlerror()) != NULL) {
            errored = true;
        }
    }
    if (!errored) {
            *(void **) (&mDlLibHandlers[i].startProcessActivity) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_process_start");
        *(void **) (&mDlLibHandler.init) = dlsym(mDlLibHandler.dlhandle, "activity_trigger_init");
        if ((rc = dlerror()) != NULL) {
            errored = true;
        }
    }
    if (!errored) {
            *(void **) (&mDlLibHandlers[i].animationScalesCheck) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_animationScalesCheck");
            if ((rc = dlerror()) != NULL) {
                errored = true;
            }
        }
        if (!errored) {
            *(void **) (&mDlLibHandlers[i].networkOptsCheck) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_networkOptsCheck");
        *(void **) (&mDlLibHandler.miscActivity) = dlsym(mDlLibHandler.dlhandle, "activity_trigger_misc");
        if ((rc = dlerror()) != NULL) {
            errored = true;
        }
    }
    if (errored) {
            mDlLibHandlers[i].startActivity  = NULL;
            mDlLibHandlers[i].resumeActivity = NULL;
            mDlLibHandlers[i].pauseActivity  = NULL;
            mDlLibHandlers[i].stopActivity = NULL;
            mDlLibHandlers[i].startProcessActivity = NULL;
            mDlLibHandlers[i].animationScalesCheck = NULL;
            mDlLibHandlers[i].networkOptsCheck = NULL;
            if (mDlLibHandlers[i].dlhandle) {
                dlclose(mDlLibHandlers[i].dlhandle);
                mDlLibHandlers[i].dlhandle = NULL;
            }
            gTotalNumLibs = 0;
        } else {
            (*mDlLibHandlers[i].init)();
        mDlLibHandler.startActivity  = NULL;
        mDlLibHandler.resumeActivity = NULL;
        mDlLibHandler.pauseActivity  = NULL;
        mDlLibHandler.stopActivity = NULL;
        mDlLibHandler.miscActivity = NULL;
        if (mDlLibHandler.dlhandle) {
            dlclose(mDlLibHandler.dlhandle);
            mDlLibHandler.dlhandle = NULL;
        }
    } else {
        (*mDlLibHandler.init)();
    }
}

static void
com_android_internal_app_ActivityTrigger_native_at_deinit(JNIEnv *env, jobject clazz)
{
    size_t numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers);
    if (mDlLibHandler.dlhandle) {
        mDlLibHandler.startActivity  = NULL;
        mDlLibHandler.resumeActivity = NULL;
        mDlLibHandler.pauseActivity  = NULL;
        mDlLibHandler.stopActivity = NULL;
        mDlLibHandler.miscActivity = NULL;

    for(size_t i = 0; i < numlibs; i++) {
        if (mDlLibHandlers[i].dlhandle) {
            mDlLibHandlers[i].startActivity  = NULL;
            mDlLibHandlers[i].resumeActivity = NULL;
            mDlLibHandlers[i].pauseActivity  = NULL;
            mDlLibHandlers[i].stopActivity = NULL;
            mDlLibHandlers[i].startProcessActivity = NULL;
            mDlLibHandlers[i].animationScalesCheck = NULL;
            mDlLibHandlers[i].networkOptsCheck = NULL;

            *(void **) (&mDlLibHandlers[i].deinit) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_deinit");
            if (mDlLibHandlers[i].deinit) {
                (*mDlLibHandlers[i].deinit)();
            }

            dlclose(mDlLibHandlers[i].dlhandle);
            mDlLibHandlers[i].dlhandle = NULL;
        }
    }
    gTotalNumLibs = 0;
        *(void **) (&mDlLibHandler.deinit) = dlsym(mDlLibHandler.dlhandle, "activity_trigger_deinit");
        if (mDlLibHandler.deinit) {
            (*mDlLibHandler.deinit)();
        }

static void
com_android_internal_app_ActivityTrigger_native_at_startProcessActivity(JNIEnv *env, jobject clazz, jstring process, jint pid)
{
    size_t numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers);
    const char *actStr = env->GetStringUTFChars(process, NULL);
    for(size_t i = 0; i < numlibs; i++){
        if(mDlLibHandlers[i].startProcessActivity && process && actStr) {
            (*mDlLibHandlers[i].startProcessActivity)(actStr, pid);
        dlclose(mDlLibHandler.dlhandle);
        mDlLibHandler.dlhandle = NULL;
    }
}
    env->ReleaseStringUTFChars(process, actStr);
}

static jint
com_android_internal_app_ActivityTrigger_native_at_startActivity(JNIEnv *env, jobject clazz, jstring activity, jint flags)
{
    int activiyFlags = flags;
    size_t numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers);
    for(size_t i = 0; i < numlibs; i++){
        if(mDlLibHandlers[i].startActivity && activity) {
    if(mDlLibHandler.startActivity && activity) {
       const char *actStr = env->GetStringUTFChars(activity, NULL);
       if (actStr) {
                (*mDlLibHandlers[i].startActivity)(actStr, &activiyFlags);
           (*mDlLibHandler.startActivity)(actStr, &activiyFlags);
           env->ReleaseStringUTFChars(activity, actStr);
       }
    }
    }
    return activiyFlags;
}

static void
com_android_internal_app_ActivityTrigger_native_at_resumeActivity(JNIEnv *env, jobject clazz, jstring activity)
{
    size_t numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers);

    for(size_t i = 0; i < numlibs; i++){
        if(mDlLibHandlers[i].resumeActivity && activity) {
    if(mDlLibHandler.resumeActivity && activity) {
       const char *actStr = env->GetStringUTFChars(activity, NULL);
       if (actStr) {
                (*mDlLibHandlers[i].resumeActivity)(actStr);
           (*mDlLibHandler.resumeActivity)(actStr);
           env->ReleaseStringUTFChars(activity, actStr);
       }
    }
}
}

static void
com_android_internal_app_ActivityTrigger_native_at_pauseActivity(JNIEnv *env, jobject clazz, jstring activity)
{
    for(size_t i = 0; i < gTotalNumLibs; i++){
        if(mDlLibHandlers[i].pauseActivity && activity) {
    if(mDlLibHandler.pauseActivity && activity) {
       const char *actStr = env->GetStringUTFChars(activity, NULL);
       if (NULL != actStr) {
                (*mDlLibHandlers[i].pauseActivity)(actStr);
           (*mDlLibHandler.pauseActivity)(actStr);
           env->ReleaseStringUTFChars(activity, actStr);
       }
    }
}
}

static void
com_android_internal_app_ActivityTrigger_native_at_stopActivity(JNIEnv *env, jobject clazz, jstring activity)
{
    for(size_t i = 0; i < gTotalNumLibs; i++){
        if(mDlLibHandlers[i].stopActivity && activity) {
    if(mDlLibHandler.stopActivity && activity) {
       const char *actStr = env->GetStringUTFChars(activity, NULL);
       if (NULL != actStr) {
                (*mDlLibHandlers[i].stopActivity)(actStr);
           (*mDlLibHandler.stopActivity)(actStr);
           env->ReleaseStringUTFChars(activity, actStr);
       }
    }
}
}

static jfloat
com_android_internal_app_ActivityTrigger_native_at_animationScalesCheck(JNIEnv *env, jobject clazz, jstring activity, jint scaleType)
com_android_internal_app_ActivityTrigger_native_at_miscActivity(JNIEnv *env, jobject clazz, jint func, jstring activity, jint type, jint flag)
{
    int type = scaleType;
    float scaleValue = -1.0f;
    size_t numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers);
    for (size_t i = 0; i < numlibs; i++) {
        if (mDlLibHandlers[i].animationScalesCheck && activity) {
    if (mDlLibHandler.miscActivity && activity && func) {
        const char *actStr = env->GetStringUTFChars(activity, NULL);
        if (actStr) {
                (*mDlLibHandlers[i].animationScalesCheck)(actStr, type, &scaleValue);
            (*mDlLibHandler.miscActivity)(func, actStr, type, flag, &scaleValue);
            env->ReleaseStringUTFChars(activity, actStr);
        }
    }
    }
    return scaleValue;
}

static void
com_android_internal_app_ActivityTrigger_native_at_networkOptsCheck(JNIEnv *env, jobject clazz, jint flag, jint netType, jstring packageName)
{
    size_t numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers);

    for (size_t i = 0; i < numlibs; i++) {
        if (mDlLibHandlers[i].networkOptsCheck && packageName) {
            const char *actStr = env->GetStringUTFChars(packageName, NULL);
            if (actStr) {
                (*mDlLibHandlers[i].networkOptsCheck)(flag, netType, actStr);
                env->ReleaseStringUTFChars(packageName, actStr);
            }
        }
    }
}
// ----------------------------------------------------------------------------

static JNINativeMethod gMethods[] = {
@@ -317,12 +238,9 @@ static JNINativeMethod gMethods[] = {
    {"native_at_pauseActivity", "(Ljava/lang/String;)V", (void *)com_android_internal_app_ActivityTrigger_native_at_pauseActivity},
    {"native_at_stopActivity", "(Ljava/lang/String;)V", (void *)com_android_internal_app_ActivityTrigger_native_at_stopActivity},
    {"native_at_deinit",         "()V",                   (void *)com_android_internal_app_ActivityTrigger_native_at_deinit},
    {"native_at_startProcessActivity", "(Ljava/lang/String;I)V", (void *)com_android_internal_app_ActivityTrigger_native_at_startProcessActivity},
    {"native_at_animationScalesCheck", "(Ljava/lang/String;I)F", (void *)com_android_internal_app_ActivityTrigger_native_at_animationScalesCheck},
    {"native_at_networkOptsCheck", "(IILjava/lang/String;)V", (void *)com_android_internal_app_ActivityTrigger_native_at_networkOptsCheck},
    {"native_at_miscActivity", "(ILjava/lang/String;II)F", (void *)com_android_internal_app_ActivityTrigger_native_at_miscActivity},
};


int register_com_android_internal_app_ActivityTrigger(JNIEnv *env)
{
    com_android_internal_app_ActivityTrigger_native_at_init();
+8 −3
Original line number Diff line number Diff line
@@ -571,6 +571,11 @@ public final class ActivityManagerService extends ActivityManagerNative
    private int lBoost_v2_TimeOut = 0;
    private int lBoost_v2_ParamVal[];
    /*define misc. activty trigger function*/
    static final int START_PROCESS = 1;
    static final int NETWORK_OPTS = 2;
    static final int ANIMATION_SCALE = 3;
    /** All system services */
    SystemServiceManager mSystemServiceManager;
@@ -2985,11 +2990,11 @@ public final class ActivityManagerService extends ActivityManagerNative
                /* netType: 0 for Mobile, 1 for WIFI*/
                int netType = netInfo.getType();
                if (mActivityTrigger != null) {
                    mActivityTrigger.networkOptsCheck(flag, netType, packageName);
                    mActivityTrigger.activityMiscTrigger(NETWORK_OPTS, packageName, netType, flag);
                }
            } else {
                if (mActivityTrigger != null) {
                    mActivityTrigger.networkOptsCheck(flag, ConnectivityManager.TYPE_NONE, packageName);
                    mActivityTrigger.activityMiscTrigger(NETWORK_OPTS, packageName, ConnectivityManager.TYPE_NONE, flag);
                }
            }
        }
@@ -3950,7 +3955,7 @@ public final class ActivityManagerService extends ActivityManagerNative
            }
            checkTime(startTime, "startProcess: done updating pids map");
            if ("activity".equals(hostingType) || "service".equals(hostingType)) {
                mActivityTrigger.activityStartProcessTrigger(app.processName, startResult.pid);
                mActivityTrigger.activityMiscTrigger(START_PROCESS, app.processName, startResult.pid, 0);
            }
        } catch (RuntimeException e) {
            Slog.e(TAG, "Failure starting process " + app.processName, e);
+6 −1
Original line number Diff line number Diff line
@@ -342,6 +342,11 @@ public class WindowManagerService extends IWindowManager.Stub

    private static final String PROPERTY_BUILD_DATE_UTC = "ro.build.date.utc";

    /*define misc. activty trigger function*/
    static final int START_PROCESS = 1;
    static final int NETWORK_OPTS = 2;
    static final int ANIMATION_SCALE = 3;

    // Enums for animation scale update types.
    @Retention(RetentionPolicy.SOURCE)
    @IntDef({WINDOW_ANIMATION_SCALE, TRANSITION_ANIMATION_SCALE, ANIMATION_DURATION_SCALE})
@@ -5563,7 +5568,7 @@ public class WindowManagerService extends IWindowManager.Stub
                        mActivityTrigger = new ActivityTrigger();
                    }
                    if (mActivityTrigger != null) {
                        value = mActivityTrigger.animationScalesCheck(mFocusingActivity, which);
                        value = mActivityTrigger.activityMiscTrigger(ANIMATION_SCALE, mFocusingActivity, which, 0);
                    }
               }
            }