1package com.xtremelabs.robolectric.shadows;
2
3import android.os.Binder;
4import android.os.Parcel;
5import android.os.RemoteException;
6import android.os.ShadowBinderBridge;
7
8import com.xtremelabs.robolectric.internal.Implementation;
9import com.xtremelabs.robolectric.internal.Implements;
10import com.xtremelabs.robolectric.internal.RealObject;
11
12@Implements(android.os.Binder.class)
13public class ShadowBinder {
14    @RealObject
15    Binder realObject;
16
17    private static Integer callingUid;
18    private static Integer callingPid;
19
20    @Implementation
21    public boolean transact(int code, Parcel data, Parcel reply, int flags) throws RemoteException {
22        return new ShadowBinderBridge(realObject).onTransact(code, data, reply, flags);
23    }
24
25    @Implementation
26    public static final int getCallingPid() {
27        if (callingPid != null) {
28            return callingPid;
29        }
30        return android.os.Process.myPid();
31    }
32
33    @Implementation
34    public static final int getCallingUid() {
35        if (callingUid != null) {
36            return callingUid;
37        }
38        return android.os.Process.myUid();
39    }
40
41    public static void setCallingPid(int pid) {
42        ShadowBinder.callingPid = pid;
43    }
44
45    public static void setCallingUid(int uid) {
46        ShadowBinder.callingUid = uid;
47    }
48
49    public static void reset() {
50        ShadowBinder.callingPid = null;
51        ShadowBinder.callingUid = null;
52    }
53}
54