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

Commit 225b5190 authored by Linux Build Service Account's avatar Linux Build Service Account
Browse files

Promotion of android-framework.lnx.2.0-00021.

CRs      Change ID                                   Subject
--------------------------------------------------------------------------------------------------------------
1078699   Ifb478db3af820eb846c5373d3a284367da3495a0   ExifInterface: Provide backward compatibility
1058153   I060bdbaedd7e248c49c8433d9f3beb90121f8861   Creating only a single activity trigger module
1082237   Icb3c6171f7629f2a4e84f6731a85a364af84a5df   AudioService : Fix for audio device latency from headset
1078906   Ib0023b44e521b936ab2f9450ad367b1feda64492   Avoid crashing when downloading MitM'd PAC that is too b
1078775   I5de6b4da52954c5588fc25abca1af2346c2d1c2d   Backport changes to whitelist sockets opened by the zygo
1078906   I8fa379a74b5d9467b5b9498bd18de2a043963c6f   Fix build break due to automerge of 7d2198b5
1083191   Ib67d1961182938c797a9a3041fdf9a97b40ec14b   frameworks/base: creating separate files for ANRs traces
1078777   I533125b36444877f54373d88922f2acc777e250b   Use "all_downloads" instead of "my_downloads".
791454   I10d2822d0406021e6f631e722e812ad714074995   Disable the plus sign conversion in non-NANP system
993265   I1a218186807a52294d8e6938d01b18a613d7623c   IMS: Define new ImsReasonInfo CODE_NORMAL_UNSPECIFIED is
1078773   I421962cbfd7c466662edcef805c3e27321dc5a98   Fix deadlock in AcitivityManagerService.
1093110   Ie1f00a1419548386b5006b92b3e05fee308c92d7   SEEMP: Do not connect to seempdw socket in zygote.

Change-Id: I2c1510e6a3bbb63c4ffc3196eb480a944bace893
CRs-Fixed: 993265, 1078699, 1083191, 1093110, 1058153, 1082237, 791454, 1078906, 1078773, 1078777, 1078775
parents 65984f35 89b3a8e6
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1089,7 +1089,7 @@ public class DownloadManager {
            if (cursor.moveToFirst()) {
                int status = cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_STATUS));
                if (DownloadManager.STATUS_SUCCESSFUL == status) {
                    return ContentUris.withAppendedId(Downloads.Impl.CONTENT_URI, id);
                   return ContentUris.withAppendedId(Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI, id);
                }
            }
        } finally {
@@ -1425,7 +1425,7 @@ public class DownloadManager {
     * @hide
     */
    public Uri getDownloadUri(long id) {
        return ContentUris.withAppendedId(mBaseUri, id);
        return ContentUris.withAppendedId(Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI, id);
    }

    /**
@@ -1519,7 +1519,7 @@ public class DownloadManager {

            // return content URI for cache download
            long downloadId = getLong(getColumnIndex(Downloads.Impl._ID));
            return ContentUris.withAppendedId(mBaseUri, downloadId).toString();
            return ContentUris.withAppendedId(Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI, downloadId).toString();
        }

        private long getReason(int status) {
+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);
}
+7 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@
#endif
#include <utils/Log.h>


#include "jni.h"
#include "JNIHelp.h"
#include "utils/misc.h"
@@ -45,6 +46,7 @@

#define LOG_BUF_SIZE 1024
#define SEEMP_SOCK_NAME "/dev/socket/seempdw"
#define ZYGOTE_PARENT_PID 1
#ifndef __unused
#define __unused  __attribute__((__unused__))
#endif
@@ -129,6 +131,11 @@ static int __write_to_log_socket(struct iovec *vec, size_t nr)
static int __write_to_log_init(struct iovec *vec, size_t nr)
{
    if (write_to_log == __write_to_log_init) {

        if (getppid() == ZYGOTE_PARENT_PID) {
            return 0;
        }

        int ret;

        ret = __write_to_log_initialize();
+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();
+26 −0
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@
#include "ScopedLocalRef.h"
#include "ScopedPrimitiveArray.h"
#include "ScopedUtfChars.h"
#include "fd_utils-inl.h"

#include "nativebridge/native_bridge.h"

@@ -434,6 +435,9 @@ static void SetForkLoad(bool boost) {
}
#endif

// The list of open zygote file descriptors.
static FileDescriptorTable* gOpenFdTable = NULL;

// Utility routine to fork zygote and specialize the child process.
static pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArray javaGids,
                                     jint debug_flags, jobjectArray javaRlimits,
@@ -448,6 +452,22 @@ static pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArra
  SetForkLoad(true);
#endif

  // Close any logging related FDs before we start evaluating the list of
  // file descriptors.
  __android_log_close();

  // If this is the first fork for this zygote, create the open FD table.
  // If it isn't, we just need to check whether the list of open files has
  // changed (and it shouldn't in the normal case).
  if (gOpenFdTable == NULL) {
    gOpenFdTable = FileDescriptorTable::Create();
    if (gOpenFdTable == NULL) {
      RuntimeAbort(env, __LINE__, "Unable to construct file descriptor table.");
    }
  } else if (!gOpenFdTable->Restat()) {
    RuntimeAbort(env, __LINE__, "Unable to restat file descriptor table.");
  }

  pid_t pid = fork();

  if (pid == 0) {
@@ -457,6 +477,12 @@ static pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArra
    // Clean up any descriptors which must be closed immediately
    DetachDescriptors(env, fdsToClose);

    // Re-open all remaining open file descriptors so that they aren't shared
    // with the zygote across a fork.
    if (!gOpenFdTable->ReopenOrDetach()) {
      RuntimeAbort(env, __LINE__, "Unable to reopen whitelisted descriptors.");
    }

    // Keep capabilities across UID change, unless we're staying root.
    if (uid != 0) {
      EnableKeepCapabilities(env);
Loading