Loading core/java/android/app/ActivityManagerNative.java +23 −0 Original line number Diff line number Diff line Loading @@ -1272,6 +1272,15 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } case GET_PROVIDER_MIME_TYPE_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); Uri uri = Uri.CREATOR.createFromParcel(data); String type = getProviderMimeType(uri); reply.writeNoException(); reply.writeString(type); return true; } case NEW_URI_PERMISSION_OWNER_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); String name = data.readString(); Loading Loading @@ -2847,6 +2856,20 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } public String getProviderMimeType(Uri uri) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); uri.writeToParcel(data, 0); mRemote.transact(GET_PROVIDER_MIME_TYPE_TRANSACTION, data, reply, 0); reply.readException(); String res = reply.readString(); data.recycle(); reply.recycle(); return res; } public IBinder newUriPermissionOwner(String name) throws RemoteException { Parcel data = Parcel.obtain(); Loading core/java/android/app/ActivityThread.java +26 −2 Original line number Diff line number Diff line Loading @@ -3287,12 +3287,20 @@ public final class ActivityThread { } } private final IContentProvider getProvider(Context context, String name) { private final IContentProvider getExistingProvider(Context context, String name) { synchronized(mProviderMap) { final ProviderClientRecord pr = mProviderMap.get(name); if (pr != null) { return pr.mProvider; } return null; } } private final IContentProvider getProvider(Context context, String name) { IContentProvider existing = getExistingProvider(context, name); if (existing != null) { return existing; } IActivityManager.ContentProviderHolder holder = null; Loading Loading @@ -3337,6 +3345,22 @@ public final class ActivityThread { return provider; } public final IContentProvider acquireExistingProvider(Context c, String name) { IContentProvider provider = getExistingProvider(c, name); if(provider == null) return null; IBinder jBinder = provider.asBinder(); synchronized(mProviderMap) { ProviderRefCount prc = mProviderRefCountMap.get(jBinder); if(prc == null) { mProviderRefCountMap.put(jBinder, new ProviderRefCount(1)); } else { prc.count++; } //end else } //end synchronized return provider; } public final boolean releaseProvider(IContentProvider provider) { if(provider == null) { return false; Loading @@ -3345,7 +3369,7 @@ public final class ActivityThread { synchronized(mProviderMap) { ProviderRefCount prc = mProviderRefCountMap.get(jBinder); if(prc == null) { if(localLOGV) Slog.v(TAG, "releaseProvider::Weird shouldnt be here"); if(localLOGV) Slog.v(TAG, "releaseProvider::Weird shouldn't be here"); return false; } else { prc.count--; Loading core/java/android/app/ContextImpl.java +8 −7 Original line number Diff line number Diff line Loading @@ -1626,22 +1626,23 @@ class ContextImpl extends Context { // ---------------------------------------------------------------------- private static final class ApplicationContentResolver extends ContentResolver { public ApplicationContentResolver(Context context, ActivityThread mainThread) { public ApplicationContentResolver(Context context, ActivityThread mainThread) { super(context); mMainThread = mainThread; } @Override protected IContentProvider acquireProvider(Context context, String name) { protected IContentProvider acquireProvider(Context context, String name) { return mMainThread.acquireProvider(context, name); } @Override public boolean releaseProvider(IContentProvider provider) { protected IContentProvider acquireExistingProvider(Context context, String name) { return mMainThread.acquireExistingProvider(context, name); } @Override public boolean releaseProvider(IContentProvider provider) { return mMainThread.releaseProvider(provider); } Loading core/java/android/app/IActivityManager.java +6 −3 Original line number Diff line number Diff line Loading @@ -314,6 +314,8 @@ public interface IActivityManager extends IInterface { public void crashApplication(int uid, int initialPid, String packageName, String message) throws RemoteException; public String getProviderMimeType(Uri uri) throws RemoteException; public IBinder newUriPermissionOwner(String name) throws RemoteException; public void grantUriPermissionFromOwner(IBinder owner, int fromUid, String targetPkg, Uri uri, int mode) throws RemoteException; Loading Loading @@ -526,7 +528,8 @@ public interface IActivityManager extends IInterface { int SET_IMMERSIVE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+111; int IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+112; int CRASH_APPLICATION_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+113; int NEW_URI_PERMISSION_OWNER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+114; int GRANT_URI_PERMISSION_FROM_OWNER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+115; int REVOKE_URI_PERMISSION_FROM_OWNER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+116; int GET_PROVIDER_MIME_TYPE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+114; int NEW_URI_PERMISSION_OWNER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+115; int GRANT_URI_PERMISSION_FROM_OWNER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+116; int REVOKE_URI_PERMISSION_FROM_OWNER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+117; } core/java/android/content/ContentProvider.java +6 −0 Original line number Diff line number Diff line Loading @@ -544,6 +544,12 @@ public abstract class ContentProvider implements ComponentCallbacks { * <a href="{@docRoot}guide/topics/fundamentals.html#procthread">Application Fundamentals: * Processes and Threads</a>. * * <p>Note that there are no permissions needed for an application to * access this information; if your content provider requires read and/or * write permissions, or is not exported, all applications can still call * this method regardless of their access permissions. This allows them * to retrieve the MIME type for a URI when dispatching intents. * * @param uri the URI to query. * @return a MIME type string, or null if there is no type. */ Loading Loading
core/java/android/app/ActivityManagerNative.java +23 −0 Original line number Diff line number Diff line Loading @@ -1272,6 +1272,15 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } case GET_PROVIDER_MIME_TYPE_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); Uri uri = Uri.CREATOR.createFromParcel(data); String type = getProviderMimeType(uri); reply.writeNoException(); reply.writeString(type); return true; } case NEW_URI_PERMISSION_OWNER_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); String name = data.readString(); Loading Loading @@ -2847,6 +2856,20 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } public String getProviderMimeType(Uri uri) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); uri.writeToParcel(data, 0); mRemote.transact(GET_PROVIDER_MIME_TYPE_TRANSACTION, data, reply, 0); reply.readException(); String res = reply.readString(); data.recycle(); reply.recycle(); return res; } public IBinder newUriPermissionOwner(String name) throws RemoteException { Parcel data = Parcel.obtain(); Loading
core/java/android/app/ActivityThread.java +26 −2 Original line number Diff line number Diff line Loading @@ -3287,12 +3287,20 @@ public final class ActivityThread { } } private final IContentProvider getProvider(Context context, String name) { private final IContentProvider getExistingProvider(Context context, String name) { synchronized(mProviderMap) { final ProviderClientRecord pr = mProviderMap.get(name); if (pr != null) { return pr.mProvider; } return null; } } private final IContentProvider getProvider(Context context, String name) { IContentProvider existing = getExistingProvider(context, name); if (existing != null) { return existing; } IActivityManager.ContentProviderHolder holder = null; Loading Loading @@ -3337,6 +3345,22 @@ public final class ActivityThread { return provider; } public final IContentProvider acquireExistingProvider(Context c, String name) { IContentProvider provider = getExistingProvider(c, name); if(provider == null) return null; IBinder jBinder = provider.asBinder(); synchronized(mProviderMap) { ProviderRefCount prc = mProviderRefCountMap.get(jBinder); if(prc == null) { mProviderRefCountMap.put(jBinder, new ProviderRefCount(1)); } else { prc.count++; } //end else } //end synchronized return provider; } public final boolean releaseProvider(IContentProvider provider) { if(provider == null) { return false; Loading @@ -3345,7 +3369,7 @@ public final class ActivityThread { synchronized(mProviderMap) { ProviderRefCount prc = mProviderRefCountMap.get(jBinder); if(prc == null) { if(localLOGV) Slog.v(TAG, "releaseProvider::Weird shouldnt be here"); if(localLOGV) Slog.v(TAG, "releaseProvider::Weird shouldn't be here"); return false; } else { prc.count--; Loading
core/java/android/app/ContextImpl.java +8 −7 Original line number Diff line number Diff line Loading @@ -1626,22 +1626,23 @@ class ContextImpl extends Context { // ---------------------------------------------------------------------- private static final class ApplicationContentResolver extends ContentResolver { public ApplicationContentResolver(Context context, ActivityThread mainThread) { public ApplicationContentResolver(Context context, ActivityThread mainThread) { super(context); mMainThread = mainThread; } @Override protected IContentProvider acquireProvider(Context context, String name) { protected IContentProvider acquireProvider(Context context, String name) { return mMainThread.acquireProvider(context, name); } @Override public boolean releaseProvider(IContentProvider provider) { protected IContentProvider acquireExistingProvider(Context context, String name) { return mMainThread.acquireExistingProvider(context, name); } @Override public boolean releaseProvider(IContentProvider provider) { return mMainThread.releaseProvider(provider); } Loading
core/java/android/app/IActivityManager.java +6 −3 Original line number Diff line number Diff line Loading @@ -314,6 +314,8 @@ public interface IActivityManager extends IInterface { public void crashApplication(int uid, int initialPid, String packageName, String message) throws RemoteException; public String getProviderMimeType(Uri uri) throws RemoteException; public IBinder newUriPermissionOwner(String name) throws RemoteException; public void grantUriPermissionFromOwner(IBinder owner, int fromUid, String targetPkg, Uri uri, int mode) throws RemoteException; Loading Loading @@ -526,7 +528,8 @@ public interface IActivityManager extends IInterface { int SET_IMMERSIVE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+111; int IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+112; int CRASH_APPLICATION_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+113; int NEW_URI_PERMISSION_OWNER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+114; int GRANT_URI_PERMISSION_FROM_OWNER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+115; int REVOKE_URI_PERMISSION_FROM_OWNER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+116; int GET_PROVIDER_MIME_TYPE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+114; int NEW_URI_PERMISSION_OWNER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+115; int GRANT_URI_PERMISSION_FROM_OWNER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+116; int REVOKE_URI_PERMISSION_FROM_OWNER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+117; }
core/java/android/content/ContentProvider.java +6 −0 Original line number Diff line number Diff line Loading @@ -544,6 +544,12 @@ public abstract class ContentProvider implements ComponentCallbacks { * <a href="{@docRoot}guide/topics/fundamentals.html#procthread">Application Fundamentals: * Processes and Threads</a>. * * <p>Note that there are no permissions needed for an application to * access this information; if your content provider requires read and/or * write permissions, or is not exported, all applications can still call * this method regardless of their access permissions. This allows them * to retrieve the MIME type for a URI when dispatching intents. * * @param uri the URI to query. * @return a MIME type string, or null if there is no type. */ Loading