/Mate10_8_1_0/src/main/java/android/content/ContentProviderNative.java

https://github.com/SivanLiu/HwFrameWorkSource · Java · 221 lines · 215 code · 6 blank · 0 comment · 27 complexity · f04e03772f3e947af86d2066f4e72242 MD5 · raw file

  1. package android.content;
  2. import android.content.res.AssetFileDescriptor;
  3. import android.database.BulkCursorDescriptor;
  4. import android.database.Cursor;
  5. import android.database.CursorToBulkCursorAdaptor;
  6. import android.database.DatabaseUtils;
  7. import android.database.IContentObserver;
  8. import android.database.IContentObserver.Stub;
  9. import android.net.Uri;
  10. import android.os.Binder;
  11. import android.os.Bundle;
  12. import android.os.IBinder;
  13. import android.os.ICancellationSignal;
  14. import android.os.Parcel;
  15. import android.os.ParcelFileDescriptor;
  16. import android.os.RemoteException;
  17. import java.util.ArrayList;
  18. public abstract class ContentProviderNative extends Binder implements IContentProvider {
  19. public abstract String getProviderName();
  20. public ContentProviderNative() {
  21. attachInterface(this, IContentProvider.descriptor);
  22. }
  23. public static IContentProvider asInterface(IBinder obj) {
  24. if (obj == null) {
  25. return null;
  26. }
  27. IContentProvider in = (IContentProvider) obj.queryLocalInterface(IContentProvider.descriptor);
  28. if (in != null) {
  29. return in;
  30. }
  31. return new ContentProviderProxy(obj);
  32. }
  33. public boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException {
  34. Throwable th;
  35. String callingPkg;
  36. int i;
  37. Uri out;
  38. int count;
  39. AssetFileDescriptor fd;
  40. switch (code) {
  41. case 1:
  42. try {
  43. data.enforceInterface(IContentProvider.descriptor);
  44. callingPkg = data.readString();
  45. Uri url = (Uri) Uri.CREATOR.createFromParcel(data);
  46. int num = data.readInt();
  47. String[] strArr = null;
  48. if (num > 0) {
  49. strArr = new String[num];
  50. for (i = 0; i < num; i++) {
  51. strArr[i] = data.readString();
  52. }
  53. }
  54. Bundle queryArgs = data.readBundle();
  55. IContentObserver observer = Stub.asInterface(data.readStrongBinder());
  56. Cursor cursor = query(callingPkg, url, strArr, queryArgs, ICancellationSignal.Stub.asInterface(data.readStrongBinder()));
  57. if (cursor != null) {
  58. CursorToBulkCursorAdaptor cursorToBulkCursorAdaptor = null;
  59. try {
  60. CursorToBulkCursorAdaptor cursorToBulkCursorAdaptor2 = new CursorToBulkCursorAdaptor(cursor, observer, getProviderName());
  61. cursor = null;
  62. try {
  63. BulkCursorDescriptor d = cursorToBulkCursorAdaptor2.getBulkCursorDescriptor();
  64. cursorToBulkCursorAdaptor = null;
  65. reply.writeNoException();
  66. reply.writeInt(1);
  67. d.writeToParcel(reply, 1);
  68. } catch (Throwable th2) {
  69. th = th2;
  70. cursorToBulkCursorAdaptor = cursorToBulkCursorAdaptor2;
  71. if (cursorToBulkCursorAdaptor != null) {
  72. cursorToBulkCursorAdaptor.close();
  73. }
  74. if (cursor != null) {
  75. cursor.close();
  76. }
  77. throw th;
  78. }
  79. } catch (Throwable th3) {
  80. th = th3;
  81. if (cursorToBulkCursorAdaptor != null) {
  82. cursorToBulkCursorAdaptor.close();
  83. }
  84. if (cursor != null) {
  85. cursor.close();
  86. }
  87. throw th;
  88. }
  89. }
  90. reply.writeNoException();
  91. reply.writeInt(0);
  92. return true;
  93. } catch (Exception e) {
  94. DatabaseUtils.writeExceptionToParcel(reply, e);
  95. return true;
  96. }
  97. case 2:
  98. data.enforceInterface(IContentProvider.descriptor);
  99. String type = getType((Uri) Uri.CREATOR.createFromParcel(data));
  100. reply.writeNoException();
  101. reply.writeString(type);
  102. return true;
  103. case 3:
  104. data.enforceInterface(IContentProvider.descriptor);
  105. out = insert(data.readString(), (Uri) Uri.CREATOR.createFromParcel(data), (ContentValues) ContentValues.CREATOR.createFromParcel(data));
  106. reply.writeNoException();
  107. Uri.writeToParcel(reply, out);
  108. return true;
  109. case 4:
  110. data.enforceInterface(IContentProvider.descriptor);
  111. count = delete(data.readString(), (Uri) Uri.CREATOR.createFromParcel(data), data.readString(), data.readStringArray());
  112. reply.writeNoException();
  113. reply.writeInt(count);
  114. return true;
  115. case 10:
  116. data.enforceInterface(IContentProvider.descriptor);
  117. count = update(data.readString(), (Uri) Uri.CREATOR.createFromParcel(data), (ContentValues) ContentValues.CREATOR.createFromParcel(data), data.readString(), data.readStringArray());
  118. reply.writeNoException();
  119. reply.writeInt(count);
  120. return true;
  121. case 13:
  122. data.enforceInterface(IContentProvider.descriptor);
  123. count = bulkInsert(data.readString(), (Uri) Uri.CREATOR.createFromParcel(data), (ContentValues[]) data.createTypedArray(ContentValues.CREATOR));
  124. reply.writeNoException();
  125. reply.writeInt(count);
  126. return true;
  127. case 14:
  128. data.enforceInterface(IContentProvider.descriptor);
  129. ParcelFileDescriptor fd2 = openFile(data.readString(), (Uri) Uri.CREATOR.createFromParcel(data), data.readString(), ICancellationSignal.Stub.asInterface(data.readStrongBinder()), data.readStrongBinder());
  130. reply.writeNoException();
  131. if (fd2 != null) {
  132. reply.writeInt(1);
  133. fd2.writeToParcel(reply, 1);
  134. } else {
  135. reply.writeInt(0);
  136. }
  137. return true;
  138. case 15:
  139. data.enforceInterface(IContentProvider.descriptor);
  140. fd = openAssetFile(data.readString(), (Uri) Uri.CREATOR.createFromParcel(data), data.readString(), ICancellationSignal.Stub.asInterface(data.readStrongBinder()));
  141. reply.writeNoException();
  142. if (fd != null) {
  143. reply.writeInt(1);
  144. fd.writeToParcel(reply, 1);
  145. } else {
  146. reply.writeInt(0);
  147. }
  148. return true;
  149. case 20:
  150. data.enforceInterface(IContentProvider.descriptor);
  151. callingPkg = data.readString();
  152. int numOperations = data.readInt();
  153. ArrayList<ContentProviderOperation> arrayList = new ArrayList(numOperations);
  154. for (i = 0; i < numOperations; i++) {
  155. arrayList.add(i, (ContentProviderOperation) ContentProviderOperation.CREATOR.createFromParcel(data));
  156. }
  157. ContentProviderResult[] results = applyBatch(callingPkg, arrayList);
  158. reply.writeNoException();
  159. reply.writeTypedArray(results, 0);
  160. return true;
  161. case 21:
  162. data.enforceInterface(IContentProvider.descriptor);
  163. Bundle responseBundle = call(data.readString(), data.readString(), data.readString(), data.readBundle());
  164. reply.writeNoException();
  165. reply.writeBundle(responseBundle);
  166. return true;
  167. case 22:
  168. data.enforceInterface(IContentProvider.descriptor);
  169. String[] types = getStreamTypes((Uri) Uri.CREATOR.createFromParcel(data), data.readString());
  170. reply.writeNoException();
  171. reply.writeStringArray(types);
  172. return true;
  173. case 23:
  174. data.enforceInterface(IContentProvider.descriptor);
  175. fd = openTypedAssetFile(data.readString(), (Uri) Uri.CREATOR.createFromParcel(data), data.readString(), data.readBundle(), ICancellationSignal.Stub.asInterface(data.readStrongBinder()));
  176. reply.writeNoException();
  177. if (fd != null) {
  178. reply.writeInt(1);
  179. fd.writeToParcel(reply, 1);
  180. } else {
  181. reply.writeInt(0);
  182. }
  183. return true;
  184. case 24:
  185. data.enforceInterface(IContentProvider.descriptor);
  186. ICancellationSignal cancellationSignal = createCancellationSignal();
  187. reply.writeNoException();
  188. reply.writeStrongBinder(cancellationSignal.asBinder());
  189. return true;
  190. case 25:
  191. data.enforceInterface(IContentProvider.descriptor);
  192. out = canonicalize(data.readString(), (Uri) Uri.CREATOR.createFromParcel(data));
  193. reply.writeNoException();
  194. Uri.writeToParcel(reply, out);
  195. return true;
  196. case 26:
  197. data.enforceInterface(IContentProvider.descriptor);
  198. out = uncanonicalize(data.readString(), (Uri) Uri.CREATOR.createFromParcel(data));
  199. reply.writeNoException();
  200. Uri.writeToParcel(reply, out);
  201. return true;
  202. case 27:
  203. data.enforceInterface(IContentProvider.descriptor);
  204. boolean out2 = refresh(data.readString(), (Uri) Uri.CREATOR.createFromParcel(data), data.readBundle(), ICancellationSignal.Stub.asInterface(data.readStrongBinder()));
  205. reply.writeNoException();
  206. reply.writeInt(out2 ? 0 : -1);
  207. return true;
  208. default:
  209. return super.onTransact(code, data, reply, flags);
  210. }
  211. }
  212. public IBinder asBinder() {
  213. return this;
  214. }
  215. }