Loading core/java/android/app/ActivityManagerNative.java +55 −12 Original line number Diff line number Diff line Loading @@ -580,7 +580,8 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM IBinder b = data.readStrongBinder(); IApplicationThread app = ApplicationThreadNative.asInterface(b); String name = data.readString(); ContentProviderHolder cph = getContentProvider(app, name); boolean stable = data.readInt() != 0; ContentProviderHolder cph = getContentProvider(app, name, stable); reply.writeNoException(); if (cph != null) { reply.writeInt(1); Loading Loading @@ -617,12 +618,30 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } case REF_CONTENT_PROVIDER_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder b = data.readStrongBinder(); int stable = data.readInt(); int unstable = data.readInt(); boolean res = refContentProvider(b, stable, unstable); reply.writeNoException(); reply.writeInt(res ? 1 : 0); return true; } case UNSTABLE_PROVIDER_DIED_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder b = data.readStrongBinder(); unstableProviderDied(b); reply.writeNoException(); return true; } case REMOVE_CONTENT_PROVIDER_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder b = data.readStrongBinder(); IApplicationThread app = ApplicationThreadNative.asInterface(b); String name = data.readString(); removeContentProvider(app, name); boolean stable = data.readInt() != 0; removeContentProvider(b, stable); reply.writeNoException(); return true; } Loading Loading @@ -2314,13 +2333,13 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } public ContentProviderHolder getContentProvider(IApplicationThread caller, String name) throws RemoteException { String name, boolean stable) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(caller != null ? caller.asBinder() : null); data.writeString(name); data.writeInt(stable ? 1 : 0); mRemote.transact(GET_CONTENT_PROVIDER_TRANSACTION, data, reply, 0); reply.readException(); int res = reply.readInt(); Loading Loading @@ -2364,14 +2383,38 @@ class ActivityManagerProxy implements IActivityManager data.recycle(); reply.recycle(); } public boolean refContentProvider(IBinder connection, int stable, int unstable) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(connection); data.writeInt(stable); data.writeInt(unstable); mRemote.transact(REF_CONTENT_PROVIDER_TRANSACTION, data, reply, 0); reply.readException(); boolean res = reply.readInt() != 0; data.recycle(); reply.recycle(); return res; } public void unstableProviderDied(IBinder connection) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(connection); mRemote.transact(UNSTABLE_PROVIDER_DIED_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); } public void removeContentProvider(IApplicationThread caller, String name) throws RemoteException { public void removeContentProvider(IBinder connection, boolean stable) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(caller != null ? caller.asBinder() : null); data.writeString(name); data.writeStrongBinder(connection); data.writeInt(stable ? 1 : 0); mRemote.transact(REMOVE_CONTENT_PROVIDER_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); Loading core/java/android/app/ActivityThread.java +307 −166 File changed.Preview size limit exceeded, changes collapsed. Show changes core/java/android/app/ApplicationThreadNative.java +17 −0 Original line number Diff line number Diff line Loading @@ -575,6 +575,15 @@ public abstract class ApplicationThreadNative extends Binder reply.writeNoException(); return true; } case UNSTABLE_PROVIDER_DIED_TRANSACTION: { data.enforceInterface(IApplicationThread.descriptor); IBinder provider = data.readStrongBinder(); unstableProviderDied(provider); reply.writeNoException(); return true; } } return super.onTransact(code, data, reply, flags); Loading Loading @@ -1163,4 +1172,12 @@ class ApplicationThreadProxy implements IApplicationThread { mRemote.transact(DUMP_DB_INFO_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); data.recycle(); } public void unstableProviderDied(IBinder provider) throws RemoteException { Parcel data = Parcel.obtain(); data.writeInterfaceToken(IApplicationThread.descriptor); data.writeStrongBinder(provider); mRemote.transact(UNSTABLE_PROVIDER_DIED_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); data.recycle(); } } core/java/android/app/ContextImpl.java +10 −5 Original line number Diff line number Diff line Loading @@ -1679,27 +1679,32 @@ class ContextImpl extends Context { @Override protected IContentProvider acquireProvider(Context context, String name) { return mMainThread.acquireProvider(context, name); return mMainThread.acquireProvider(context, name, true); } @Override protected IContentProvider acquireExistingProvider(Context context, String name) { return mMainThread.acquireExistingProvider(context, name); return mMainThread.acquireExistingProvider(context, name, true); } @Override public boolean releaseProvider(IContentProvider provider) { return mMainThread.releaseProvider(provider); return mMainThread.releaseProvider(provider, true); } @Override protected IContentProvider acquireUnstableProvider(Context c, String name) { return mMainThread.acquireUnstableProvider(c, name); return mMainThread.acquireProvider(c, name, false); } @Override public boolean releaseUnstableProvider(IContentProvider icp) { return mMainThread.releaseUnstableProvider(icp); return mMainThread.releaseProvider(icp, false); } @Override public void unstableProviderDied(IContentProvider icp) { mMainThread.handleUnstableProviderDied(icp.asBinder(), true); } private final ActivityThread mMainThread; Loading core/java/android/app/IActivityManager.java +10 −4 Original line number Diff line number Diff line Loading @@ -116,14 +116,16 @@ public interface IActivityManager extends IInterface { public void reportThumbnail(IBinder token, Bitmap thumbnail, CharSequence description) throws RemoteException; public ContentProviderHolder getContentProvider(IApplicationThread caller, String name) throws RemoteException; String name, boolean stable) throws RemoteException; public ContentProviderHolder getContentProviderExternal(String name, IBinder token) throws RemoteException; public void removeContentProvider(IApplicationThread caller, String name) throws RemoteException; public void removeContentProvider(IBinder connection, boolean stable) throws RemoteException; public void removeContentProviderExternal(String name, IBinder token) throws RemoteException; public void publishContentProviders(IApplicationThread caller, List<ContentProviderHolder> providers) throws RemoteException; public boolean refContentProvider(IBinder connection, int stableDelta, int unstableDelta) throws RemoteException; public void unstableProviderDied(IBinder connection) throws RemoteException; public PendingIntent getRunningServiceControlPanel(ComponentName service) throws RemoteException; public ComponentName startService(IApplicationThread caller, Intent service, Loading Loading @@ -363,6 +365,7 @@ public interface IActivityManager extends IInterface { public static class ContentProviderHolder implements Parcelable { public final ProviderInfo info; public IContentProvider provider; public IBinder connection; public boolean noReleaseNeeded; public ContentProviderHolder(ProviderInfo _info) { Loading @@ -380,6 +383,7 @@ public interface IActivityManager extends IInterface { } else { dest.writeStrongBinder(null); } dest.writeStrongBinder(connection); dest.writeInt(noReleaseNeeded ? 1:0); } Loading @@ -398,6 +402,7 @@ public interface IActivityManager extends IInterface { info = ProviderInfo.CREATOR.createFromParcel(source); provider = ContentProviderNative.asInterface( source.readStrongBinder()); connection = source.readStrongBinder(); noReleaseNeeded = source.readInt() != 0; } } Loading Loading @@ -476,7 +481,7 @@ public interface IActivityManager extends IInterface { int REPORT_THUMBNAIL_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+27; int GET_CONTENT_PROVIDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+28; int PUBLISH_CONTENT_PROVIDERS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+29; int REF_CONTENT_PROVIDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+30; int FINISH_SUB_ACTIVITY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+31; int GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+32; int START_SERVICE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+33; Loading Loading @@ -597,4 +602,5 @@ public interface IActivityManager extends IInterface { int SET_LOCK_SCREEN_SHOWN_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+147; int FINISH_ACTIVITY_AFFINITY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+148; int GET_LAUNCHED_FROM_UID_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+149; int UNSTABLE_PROVIDER_DIED_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+150; } Loading
core/java/android/app/ActivityManagerNative.java +55 −12 Original line number Diff line number Diff line Loading @@ -580,7 +580,8 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM IBinder b = data.readStrongBinder(); IApplicationThread app = ApplicationThreadNative.asInterface(b); String name = data.readString(); ContentProviderHolder cph = getContentProvider(app, name); boolean stable = data.readInt() != 0; ContentProviderHolder cph = getContentProvider(app, name, stable); reply.writeNoException(); if (cph != null) { reply.writeInt(1); Loading Loading @@ -617,12 +618,30 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } case REF_CONTENT_PROVIDER_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder b = data.readStrongBinder(); int stable = data.readInt(); int unstable = data.readInt(); boolean res = refContentProvider(b, stable, unstable); reply.writeNoException(); reply.writeInt(res ? 1 : 0); return true; } case UNSTABLE_PROVIDER_DIED_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder b = data.readStrongBinder(); unstableProviderDied(b); reply.writeNoException(); return true; } case REMOVE_CONTENT_PROVIDER_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder b = data.readStrongBinder(); IApplicationThread app = ApplicationThreadNative.asInterface(b); String name = data.readString(); removeContentProvider(app, name); boolean stable = data.readInt() != 0; removeContentProvider(b, stable); reply.writeNoException(); return true; } Loading Loading @@ -2314,13 +2333,13 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } public ContentProviderHolder getContentProvider(IApplicationThread caller, String name) throws RemoteException { String name, boolean stable) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(caller != null ? caller.asBinder() : null); data.writeString(name); data.writeInt(stable ? 1 : 0); mRemote.transact(GET_CONTENT_PROVIDER_TRANSACTION, data, reply, 0); reply.readException(); int res = reply.readInt(); Loading Loading @@ -2364,14 +2383,38 @@ class ActivityManagerProxy implements IActivityManager data.recycle(); reply.recycle(); } public boolean refContentProvider(IBinder connection, int stable, int unstable) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(connection); data.writeInt(stable); data.writeInt(unstable); mRemote.transact(REF_CONTENT_PROVIDER_TRANSACTION, data, reply, 0); reply.readException(); boolean res = reply.readInt() != 0; data.recycle(); reply.recycle(); return res; } public void unstableProviderDied(IBinder connection) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(connection); mRemote.transact(UNSTABLE_PROVIDER_DIED_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); } public void removeContentProvider(IApplicationThread caller, String name) throws RemoteException { public void removeContentProvider(IBinder connection, boolean stable) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(caller != null ? caller.asBinder() : null); data.writeString(name); data.writeStrongBinder(connection); data.writeInt(stable ? 1 : 0); mRemote.transact(REMOVE_CONTENT_PROVIDER_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); Loading
core/java/android/app/ActivityThread.java +307 −166 File changed.Preview size limit exceeded, changes collapsed. Show changes
core/java/android/app/ApplicationThreadNative.java +17 −0 Original line number Diff line number Diff line Loading @@ -575,6 +575,15 @@ public abstract class ApplicationThreadNative extends Binder reply.writeNoException(); return true; } case UNSTABLE_PROVIDER_DIED_TRANSACTION: { data.enforceInterface(IApplicationThread.descriptor); IBinder provider = data.readStrongBinder(); unstableProviderDied(provider); reply.writeNoException(); return true; } } return super.onTransact(code, data, reply, flags); Loading Loading @@ -1163,4 +1172,12 @@ class ApplicationThreadProxy implements IApplicationThread { mRemote.transact(DUMP_DB_INFO_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); data.recycle(); } public void unstableProviderDied(IBinder provider) throws RemoteException { Parcel data = Parcel.obtain(); data.writeInterfaceToken(IApplicationThread.descriptor); data.writeStrongBinder(provider); mRemote.transact(UNSTABLE_PROVIDER_DIED_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); data.recycle(); } }
core/java/android/app/ContextImpl.java +10 −5 Original line number Diff line number Diff line Loading @@ -1679,27 +1679,32 @@ class ContextImpl extends Context { @Override protected IContentProvider acquireProvider(Context context, String name) { return mMainThread.acquireProvider(context, name); return mMainThread.acquireProvider(context, name, true); } @Override protected IContentProvider acquireExistingProvider(Context context, String name) { return mMainThread.acquireExistingProvider(context, name); return mMainThread.acquireExistingProvider(context, name, true); } @Override public boolean releaseProvider(IContentProvider provider) { return mMainThread.releaseProvider(provider); return mMainThread.releaseProvider(provider, true); } @Override protected IContentProvider acquireUnstableProvider(Context c, String name) { return mMainThread.acquireUnstableProvider(c, name); return mMainThread.acquireProvider(c, name, false); } @Override public boolean releaseUnstableProvider(IContentProvider icp) { return mMainThread.releaseUnstableProvider(icp); return mMainThread.releaseProvider(icp, false); } @Override public void unstableProviderDied(IContentProvider icp) { mMainThread.handleUnstableProviderDied(icp.asBinder(), true); } private final ActivityThread mMainThread; Loading
core/java/android/app/IActivityManager.java +10 −4 Original line number Diff line number Diff line Loading @@ -116,14 +116,16 @@ public interface IActivityManager extends IInterface { public void reportThumbnail(IBinder token, Bitmap thumbnail, CharSequence description) throws RemoteException; public ContentProviderHolder getContentProvider(IApplicationThread caller, String name) throws RemoteException; String name, boolean stable) throws RemoteException; public ContentProviderHolder getContentProviderExternal(String name, IBinder token) throws RemoteException; public void removeContentProvider(IApplicationThread caller, String name) throws RemoteException; public void removeContentProvider(IBinder connection, boolean stable) throws RemoteException; public void removeContentProviderExternal(String name, IBinder token) throws RemoteException; public void publishContentProviders(IApplicationThread caller, List<ContentProviderHolder> providers) throws RemoteException; public boolean refContentProvider(IBinder connection, int stableDelta, int unstableDelta) throws RemoteException; public void unstableProviderDied(IBinder connection) throws RemoteException; public PendingIntent getRunningServiceControlPanel(ComponentName service) throws RemoteException; public ComponentName startService(IApplicationThread caller, Intent service, Loading Loading @@ -363,6 +365,7 @@ public interface IActivityManager extends IInterface { public static class ContentProviderHolder implements Parcelable { public final ProviderInfo info; public IContentProvider provider; public IBinder connection; public boolean noReleaseNeeded; public ContentProviderHolder(ProviderInfo _info) { Loading @@ -380,6 +383,7 @@ public interface IActivityManager extends IInterface { } else { dest.writeStrongBinder(null); } dest.writeStrongBinder(connection); dest.writeInt(noReleaseNeeded ? 1:0); } Loading @@ -398,6 +402,7 @@ public interface IActivityManager extends IInterface { info = ProviderInfo.CREATOR.createFromParcel(source); provider = ContentProviderNative.asInterface( source.readStrongBinder()); connection = source.readStrongBinder(); noReleaseNeeded = source.readInt() != 0; } } Loading Loading @@ -476,7 +481,7 @@ public interface IActivityManager extends IInterface { int REPORT_THUMBNAIL_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+27; int GET_CONTENT_PROVIDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+28; int PUBLISH_CONTENT_PROVIDERS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+29; int REF_CONTENT_PROVIDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+30; int FINISH_SUB_ACTIVITY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+31; int GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+32; int START_SERVICE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+33; Loading Loading @@ -597,4 +602,5 @@ public interface IActivityManager extends IInterface { int SET_LOCK_SCREEN_SHOWN_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+147; int FINISH_ACTIVITY_AFFINITY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+148; int GET_LAUNCHED_FROM_UID_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+149; int UNSTABLE_PROVIDER_DIED_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+150; }