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

Commit a80b438b authored by Sudheer Shanka's avatar Sudheer Shanka
Browse files

Update usage of activity manager service.

Move un/marshalling code to frameworks/native/libs/binder.

Bug: 30977067
Test: Verified that transaction works fine.
Change-Id: I5d5404f7aee6d79b4bcdbda6d943d265ae9ef633
parent bd54eef2
Loading
Loading
Loading
Loading
+4 −24
Original line number Original line Diff line number Diff line
@@ -14,18 +14,14 @@
 * limitations under the License.
 * limitations under the License.
 */
 */


#include <unistd.h>
#include <binder/IActivityManager.h>
#include <binder/IBinder.h>
#include <binder/IBinder.h>
#include <binder/IServiceManager.h>
#include <binder/IServiceManager.h>
#include <binder/Parcel.h>
#include <utils/String8.h>


#include "ActivityManager.h"
#include "ActivityManager.h"


namespace android {
namespace android {


const uint32_t OPEN_CONTENT_URI_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION;

// Perform ContentProvider.openFile() on the given URI, returning
// Perform ContentProvider.openFile() on the given URI, returning
// the resulting native file descriptor.  Returns < 0 on error.
// the resulting native file descriptor.  Returns < 0 on error.
int openContentProviderFile(const String16& uri)
int openContentProviderFile(const String16& uri)
@@ -33,26 +29,10 @@ int openContentProviderFile(const String16& uri)
    int fd = -1;
    int fd = -1;


    sp<IServiceManager> sm = defaultServiceManager();
    sp<IServiceManager> sm = defaultServiceManager();
    sp<IBinder> am = sm->getService(String16("activity"));
    sp<IBinder> binder = sm->getService(String16("activity"));
    sp<IActivityManager> am = interface_cast<IActivityManager>(binder);
    if (am != NULL) {
    if (am != NULL) {
        Parcel data, reply;
        fd = am->openContentUri(uri);
        data.writeInterfaceToken(String16("android.app.IActivityManager"));
        data.writeString16(uri);
        status_t ret = am->transact(OPEN_CONTENT_URI_TRANSACTION, data, &reply);
        if (ret == NO_ERROR) {
            int32_t exceptionCode = reply.readExceptionCode();
            if (!exceptionCode) {
                // Success is indicated here by a nonzero int followed by the fd;
                // failure by a zero int with no data following.
                if (reply.readInt32() != 0) {
                    fd = dup(reply.readFileDescriptor());
                }
            } else {
                // An exception was thrown back; fall through to return failure
                ALOGD("openContentUri(%s) caught exception %d\n",
                        String8(uri).string(), exceptionCode);
            }
        }
    }
    }


    return fd;
    return fd;