FileProvider.smali 28 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057
  1. .class public Landroid/support/v4/content/FileProvider;
  2. .super Landroid/content/ContentProvider;
  3. .source "FileProvider.java"
  4. # annotations
  5. .annotation system Ldalvik/annotation/MemberClasses;
  6. value = {
  7. Landroid/support/v4/content/FileProvider$SimplePathStrategy;,
  8. Landroid/support/v4/content/FileProvider$PathStrategy;
  9. }
  10. .end annotation
  11. # static fields
  12. .field private static final ATTR_NAME:Ljava/lang/String; = "name"
  13. .field private static final ATTR_PATH:Ljava/lang/String; = "path"
  14. .field private static final COLUMNS:[Ljava/lang/String;
  15. .field private static final DEVICE_ROOT:Ljava/io/File;
  16. .field private static final META_DATA_FILE_PROVIDER_PATHS:Ljava/lang/String; = "android.support.FILE_PROVIDER_PATHS"
  17. .field private static final TAG_CACHE_PATH:Ljava/lang/String; = "cache-path"
  18. .field private static final TAG_EXTERNAL:Ljava/lang/String; = "external-path"
  19. .field private static final TAG_FILES_PATH:Ljava/lang/String; = "files-path"
  20. .field private static final TAG_ROOT_PATH:Ljava/lang/String; = "root-path"
  21. .field private static sCache:Ljava/util/HashMap;
  22. .annotation system Ldalvik/annotation/Signature;
  23. value = {
  24. "Ljava/util/HashMap",
  25. "<",
  26. "Ljava/lang/String;",
  27. "Landroid/support/v4/content/FileProvider$PathStrategy;",
  28. ">;"
  29. }
  30. .end annotation
  31. .end field
  32. # instance fields
  33. .field private mStrategy:Landroid/support/v4/content/FileProvider$PathStrategy;
  34. # direct methods
  35. .method static constructor <clinit>()V
  36. .locals 3
  37. .prologue
  38. .line 303
  39. const/4 v0, 0x2
  40. new-array v0, v0, [Ljava/lang/String;
  41. const/4 v1, 0x0
  42. const-string v2, "_display_name"
  43. aput-object v2, v0, v1
  44. const/4 v1, 0x1
  45. const-string v2, "_size"
  46. aput-object v2, v0, v1
  47. sput-object v0, Landroid/support/v4/content/FileProvider;->COLUMNS:[Ljava/lang/String;
  48. .line 317
  49. new-instance v0, Ljava/io/File;
  50. const-string v1, "/"
  51. invoke-direct {v0, v1}, Ljava/io/File;-><init>(Ljava/lang/String;)V
  52. sput-object v0, Landroid/support/v4/content/FileProvider;->DEVICE_ROOT:Ljava/io/File;
  53. .line 320
  54. new-instance v0, Ljava/util/HashMap;
  55. invoke-direct {v0}, Ljava/util/HashMap;-><init>()V
  56. sput-object v0, Landroid/support/v4/content/FileProvider;->sCache:Ljava/util/HashMap;
  57. return-void
  58. .end method
  59. .method public constructor <init>()V
  60. .locals 0
  61. .prologue
  62. .line 302
  63. invoke-direct {p0}, Landroid/content/ContentProvider;-><init>()V
  64. .line 630
  65. return-void
  66. .end method
  67. .method private static varargs buildPath(Ljava/io/File;[Ljava/lang/String;)Ljava/io/File;
  68. .locals 6
  69. .param p0, "base" # Ljava/io/File;
  70. .param p1, "segments" # [Ljava/lang/String;
  71. .prologue
  72. .line 753
  73. move-object v1, p0
  74. .line 754
  75. .local v1, "cur":Ljava/io/File;
  76. move-object v0, p1
  77. .local v0, "arr$":[Ljava/lang/String;
  78. array-length v4, v0
  79. .local v4, "len$":I
  80. const/4 v3, 0x0
  81. .local v3, "i$":I
  82. move-object v2, v1
  83. .end local v1 # "cur":Ljava/io/File;
  84. .local v2, "cur":Ljava/io/File;
  85. :goto_0
  86. if-ge v3, v4, :cond_0
  87. aget-object v5, v0, v3
  88. .line 755
  89. .local v5, "segment":Ljava/lang/String;
  90. if-eqz v5, :cond_1
  91. .line 756
  92. new-instance v1, Ljava/io/File;
  93. invoke-direct {v1, v2, v5}, Ljava/io/File;-><init>(Ljava/io/File;Ljava/lang/String;)V
  94. .line 754
  95. .end local v2 # "cur":Ljava/io/File;
  96. .restart local v1 # "cur":Ljava/io/File;
  97. :goto_1
  98. add-int/lit8 v3, v3, 0x1
  99. move-object v2, v1
  100. .end local v1 # "cur":Ljava/io/File;
  101. .restart local v2 # "cur":Ljava/io/File;
  102. goto :goto_0
  103. .line 759
  104. .end local v5 # "segment":Ljava/lang/String;
  105. :cond_0
  106. return-object v2
  107. .restart local v5 # "segment":Ljava/lang/String;
  108. :cond_1
  109. move-object v1, v2
  110. .end local v2 # "cur":Ljava/io/File;
  111. .restart local v1 # "cur":Ljava/io/File;
  112. goto :goto_1
  113. .end method
  114. .method private static copyOf([Ljava/lang/Object;I)[Ljava/lang/Object;
  115. .locals 2
  116. .param p0, "original" # [Ljava/lang/Object;
  117. .param p1, "newLength" # I
  118. .prologue
  119. const/4 v1, 0x0
  120. .line 769
  121. new-array v0, p1, [Ljava/lang/Object;
  122. .line 770
  123. .local v0, "result":[Ljava/lang/Object;
  124. invoke-static {p0, v1, v0, v1, p1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
  125. .line 771
  126. return-object v0
  127. .end method
  128. .method private static copyOf([Ljava/lang/String;I)[Ljava/lang/String;
  129. .locals 2
  130. .param p0, "original" # [Ljava/lang/String;
  131. .param p1, "newLength" # I
  132. .prologue
  133. const/4 v1, 0x0
  134. .line 763
  135. new-array v0, p1, [Ljava/lang/String;
  136. .line 764
  137. .local v0, "result":[Ljava/lang/String;
  138. invoke-static {p0, v1, v0, v1, p1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
  139. .line 765
  140. return-object v0
  141. .end method
  142. .method private static getPathStrategy(Landroid/content/Context;Ljava/lang/String;)Landroid/support/v4/content/FileProvider$PathStrategy;
  143. .locals 5
  144. .param p0, "context" # Landroid/content/Context;
  145. .param p1, "authority" # Ljava/lang/String;
  146. .prologue
  147. .line 530
  148. sget-object v3, Landroid/support/v4/content/FileProvider;->sCache:Ljava/util/HashMap;
  149. monitor-enter v3
  150. .line 531
  151. :try_start_0
  152. sget-object v2, Landroid/support/v4/content/FileProvider;->sCache:Ljava/util/HashMap;
  153. invoke-virtual {v2, p1}, Ljava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
  154. move-result-object v1
  155. check-cast v1, Landroid/support/v4/content/FileProvider$PathStrategy;
  156. :try_end_0
  157. .catchall {:try_start_0 .. :try_end_0} :catchall_0
  158. .line 532
  159. .local v1, "strat":Landroid/support/v4/content/FileProvider$PathStrategy;
  160. if-nez v1, :cond_0
  161. .line 534
  162. :try_start_1
  163. invoke-static {p0, p1}, Landroid/support/v4/content/FileProvider;->parsePathStrategy(Landroid/content/Context;Ljava/lang/String;)Landroid/support/v4/content/FileProvider$PathStrategy;
  164. :try_end_1
  165. .catch Ljava/io/IOException; {:try_start_1 .. :try_end_1} :catch_0
  166. .catch Lorg/xmlpull/v1/XmlPullParserException; {:try_start_1 .. :try_end_1} :catch_1
  167. .catchall {:try_start_1 .. :try_end_1} :catchall_0
  168. move-result-object v1
  169. .line 542
  170. :try_start_2
  171. sget-object v2, Landroid/support/v4/content/FileProvider;->sCache:Ljava/util/HashMap;
  172. invoke-virtual {v2, p1, v1}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
  173. .line 544
  174. :cond_0
  175. monitor-exit v3
  176. .line 545
  177. return-object v1
  178. .line 535
  179. :catch_0
  180. move-exception v0
  181. .line 536
  182. .local v0, "e":Ljava/io/IOException;
  183. new-instance v2, Ljava/lang/IllegalArgumentException;
  184. const-string v4, "Failed to parse android.support.FILE_PROVIDER_PATHS meta-data"
  185. invoke-direct {v2, v4, v0}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
  186. throw v2
  187. .line 544
  188. .end local v0 # "e":Ljava/io/IOException;
  189. .end local v1 # "strat":Landroid/support/v4/content/FileProvider$PathStrategy;
  190. :catchall_0
  191. move-exception v2
  192. monitor-exit v3
  193. :try_end_2
  194. .catchall {:try_start_2 .. :try_end_2} :catchall_0
  195. throw v2
  196. .line 538
  197. .restart local v1 # "strat":Landroid/support/v4/content/FileProvider$PathStrategy;
  198. :catch_1
  199. move-exception v0
  200. .line 539
  201. .local v0, "e":Lorg/xmlpull/v1/XmlPullParserException;
  202. :try_start_3
  203. new-instance v2, Ljava/lang/IllegalArgumentException;
  204. const-string v4, "Failed to parse android.support.FILE_PROVIDER_PATHS meta-data"
  205. invoke-direct {v2, v4, v0}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
  206. throw v2
  207. :try_end_3
  208. .catchall {:try_start_3 .. :try_end_3} :catchall_0
  209. .end method
  210. .method public static getUriForFile(Landroid/content/Context;Ljava/lang/String;Ljava/io/File;)Landroid/net/Uri;
  211. .locals 2
  212. .param p0, "context" # Landroid/content/Context;
  213. .param p1, "authority" # Ljava/lang/String;
  214. .param p2, "file" # Ljava/io/File;
  215. .prologue
  216. .line 376
  217. invoke-static {p0, p1}, Landroid/support/v4/content/FileProvider;->getPathStrategy(Landroid/content/Context;Ljava/lang/String;)Landroid/support/v4/content/FileProvider$PathStrategy;
  218. move-result-object v0
  219. .line 377
  220. .local v0, "strategy":Landroid/support/v4/content/FileProvider$PathStrategy;
  221. invoke-interface {v0, p2}, Landroid/support/v4/content/FileProvider$PathStrategy;->getUriForFile(Ljava/io/File;)Landroid/net/Uri;
  222. move-result-object v1
  223. return-object v1
  224. .end method
  225. .method private static modeToMode(Ljava/lang/String;)I
  226. .locals 4
  227. .param p0, "mode" # Ljava/lang/String;
  228. .prologue
  229. .line 729
  230. const-string v1, "r"
  231. invoke-virtual {v1, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  232. move-result v1
  233. if-eqz v1, :cond_0
  234. .line 730
  235. const/high16 v0, 0x10000000
  236. .line 749
  237. .local v0, "modeBits":I
  238. :goto_0
  239. return v0
  240. .line 731
  241. .end local v0 # "modeBits":I
  242. :cond_0
  243. const-string v1, "w"
  244. invoke-virtual {v1, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  245. move-result v1
  246. if-nez v1, :cond_1
  247. const-string v1, "wt"
  248. invoke-virtual {v1, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  249. move-result v1
  250. if-eqz v1, :cond_2
  251. .line 732
  252. :cond_1
  253. const/high16 v0, 0x2c000000
  254. .restart local v0 # "modeBits":I
  255. goto :goto_0
  256. .line 735
  257. .end local v0 # "modeBits":I
  258. :cond_2
  259. const-string v1, "wa"
  260. invoke-virtual {v1, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  261. move-result v1
  262. if-eqz v1, :cond_3
  263. .line 736
  264. const/high16 v0, 0x2a000000
  265. .restart local v0 # "modeBits":I
  266. goto :goto_0
  267. .line 739
  268. .end local v0 # "modeBits":I
  269. :cond_3
  270. const-string v1, "rw"
  271. invoke-virtual {v1, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  272. move-result v1
  273. if-eqz v1, :cond_4
  274. .line 740
  275. const/high16 v0, 0x38000000
  276. .restart local v0 # "modeBits":I
  277. goto :goto_0
  278. .line 742
  279. .end local v0 # "modeBits":I
  280. :cond_4
  281. const-string v1, "rwt"
  282. invoke-virtual {v1, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  283. move-result v1
  284. if-eqz v1, :cond_5
  285. .line 743
  286. const/high16 v0, 0x3c000000 # 0.0078125f
  287. .restart local v0 # "modeBits":I
  288. goto :goto_0
  289. .line 747
  290. .end local v0 # "modeBits":I
  291. :cond_5
  292. new-instance v1, Ljava/lang/IllegalArgumentException;
  293. new-instance v2, Ljava/lang/StringBuilder;
  294. invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
  295. const-string v3, "Invalid mode: "
  296. invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  297. move-result-object v2
  298. invoke-virtual {v2, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  299. move-result-object v2
  300. invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
  301. move-result-object v2
  302. invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
  303. throw v1
  304. .end method
  305. .method private static parsePathStrategy(Landroid/content/Context;Ljava/lang/String;)Landroid/support/v4/content/FileProvider$PathStrategy;
  306. .locals 13
  307. .param p0, "context" # Landroid/content/Context;
  308. .param p1, "authority" # Ljava/lang/String;
  309. .annotation system Ldalvik/annotation/Throws;
  310. value = {
  311. Ljava/io/IOException;,
  312. Lorg/xmlpull/v1/XmlPullParserException;
  313. }
  314. .end annotation
  315. .prologue
  316. const/4 v12, 0x0
  317. const/4 v11, 0x0
  318. const/4 v10, 0x1
  319. .line 556
  320. new-instance v4, Landroid/support/v4/content/FileProvider$SimplePathStrategy;
  321. invoke-direct {v4, p1}, Landroid/support/v4/content/FileProvider$SimplePathStrategy;-><init>(Ljava/lang/String;)V
  322. .line 558
  323. .local v4, "strat":Landroid/support/v4/content/FileProvider$SimplePathStrategy;
  324. invoke-virtual {p0}, Landroid/content/Context;->getPackageManager()Landroid/content/pm/PackageManager;
  325. move-result-object v8
  326. const/16 v9, 0x80
  327. invoke-virtual {v8, p1, v9}, Landroid/content/pm/PackageManager;->resolveContentProvider(Ljava/lang/String;I)Landroid/content/pm/ProviderInfo;
  328. move-result-object v1
  329. .line 560
  330. .local v1, "info":Landroid/content/pm/ProviderInfo;
  331. invoke-virtual {p0}, Landroid/content/Context;->getPackageManager()Landroid/content/pm/PackageManager;
  332. move-result-object v8
  333. const-string v9, "android.support.FILE_PROVIDER_PATHS"
  334. invoke-virtual {v1, v8, v9}, Landroid/content/pm/ProviderInfo;->loadXmlMetaData(Landroid/content/pm/PackageManager;Ljava/lang/String;)Landroid/content/res/XmlResourceParser;
  335. move-result-object v0
  336. .line 562
  337. .local v0, "in":Landroid/content/res/XmlResourceParser;
  338. if-nez v0, :cond_0
  339. .line 563
  340. new-instance v8, Ljava/lang/IllegalArgumentException;
  341. const-string v9, "Missing android.support.FILE_PROVIDER_PATHS meta-data"
  342. invoke-direct {v8, v9}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
  343. throw v8
  344. .line 568
  345. :cond_0
  346. :goto_0
  347. invoke-interface {v0}, Landroid/content/res/XmlResourceParser;->next()I
  348. move-result v7
  349. .local v7, "type":I
  350. if-eq v7, v10, :cond_5
  351. .line 569
  352. const/4 v8, 0x2
  353. if-ne v7, v8, :cond_0
  354. .line 570
  355. invoke-interface {v0}, Landroid/content/res/XmlResourceParser;->getName()Ljava/lang/String;
  356. move-result-object v5
  357. .line 572
  358. .local v5, "tag":Ljava/lang/String;
  359. const-string v8, "name"
  360. invoke-interface {v0, v12, v8}, Landroid/content/res/XmlResourceParser;->getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
  361. move-result-object v2
  362. .line 573
  363. .local v2, "name":Ljava/lang/String;
  364. const-string v8, "path"
  365. invoke-interface {v0, v12, v8}, Landroid/content/res/XmlResourceParser;->getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
  366. move-result-object v3
  367. .line 575
  368. .local v3, "path":Ljava/lang/String;
  369. const/4 v6, 0x0
  370. .line 576
  371. .local v6, "target":Ljava/io/File;
  372. const-string v8, "root-path"
  373. invoke-virtual {v8, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  374. move-result v8
  375. if-eqz v8, :cond_2
  376. .line 577
  377. sget-object v8, Landroid/support/v4/content/FileProvider;->DEVICE_ROOT:Ljava/io/File;
  378. new-array v9, v10, [Ljava/lang/String;
  379. aput-object v3, v9, v11
  380. invoke-static {v8, v9}, Landroid/support/v4/content/FileProvider;->buildPath(Ljava/io/File;[Ljava/lang/String;)Ljava/io/File;
  381. move-result-object v6
  382. .line 586
  383. :cond_1
  384. :goto_1
  385. if-eqz v6, :cond_0
  386. .line 587
  387. invoke-virtual {v4, v2, v6}, Landroid/support/v4/content/FileProvider$SimplePathStrategy;->addRoot(Ljava/lang/String;Ljava/io/File;)V
  388. goto :goto_0
  389. .line 578
  390. :cond_2
  391. const-string v8, "files-path"
  392. invoke-virtual {v8, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  393. move-result v8
  394. if-eqz v8, :cond_3
  395. .line 579
  396. invoke-virtual {p0}, Landroid/content/Context;->getFilesDir()Ljava/io/File;
  397. move-result-object v8
  398. new-array v9, v10, [Ljava/lang/String;
  399. aput-object v3, v9, v11
  400. invoke-static {v8, v9}, Landroid/support/v4/content/FileProvider;->buildPath(Ljava/io/File;[Ljava/lang/String;)Ljava/io/File;
  401. move-result-object v6
  402. goto :goto_1
  403. .line 580
  404. :cond_3
  405. const-string v8, "cache-path"
  406. invoke-virtual {v8, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  407. move-result v8
  408. if-eqz v8, :cond_4
  409. .line 581
  410. invoke-virtual {p0}, Landroid/content/Context;->getCacheDir()Ljava/io/File;
  411. move-result-object v8
  412. new-array v9, v10, [Ljava/lang/String;
  413. aput-object v3, v9, v11
  414. invoke-static {v8, v9}, Landroid/support/v4/content/FileProvider;->buildPath(Ljava/io/File;[Ljava/lang/String;)Ljava/io/File;
  415. move-result-object v6
  416. goto :goto_1
  417. .line 582
  418. :cond_4
  419. const-string v8, "external-path"
  420. invoke-virtual {v8, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  421. move-result v8
  422. if-eqz v8, :cond_1
  423. .line 583
  424. invoke-static {}, Landroid/os/Environment;->getExternalStorageDirectory()Ljava/io/File;
  425. move-result-object v8
  426. new-array v9, v10, [Ljava/lang/String;
  427. aput-object v3, v9, v11
  428. invoke-static {v8, v9}, Landroid/support/v4/content/FileProvider;->buildPath(Ljava/io/File;[Ljava/lang/String;)Ljava/io/File;
  429. move-result-object v6
  430. goto :goto_1
  431. .line 592
  432. .end local v2 # "name":Ljava/lang/String;
  433. .end local v3 # "path":Ljava/lang/String;
  434. .end local v5 # "tag":Ljava/lang/String;
  435. .end local v6 # "target":Ljava/io/File;
  436. :cond_5
  437. return-object v4
  438. .end method
  439. # virtual methods
  440. .method public attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V
  441. .locals 2
  442. .param p1, "context" # Landroid/content/Context;
  443. .param p2, "info" # Landroid/content/pm/ProviderInfo;
  444. .prologue
  445. .line 342
  446. invoke-super {p0, p1, p2}, Landroid/content/ContentProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V
  447. .line 345
  448. iget-boolean v0, p2, Landroid/content/pm/ProviderInfo;->exported:Z
  449. if-eqz v0, :cond_0
  450. .line 346
  451. new-instance v0, Ljava/lang/SecurityException;
  452. const-string v1, "Provider must not be exported"
  453. invoke-direct {v0, v1}, Ljava/lang/SecurityException;-><init>(Ljava/lang/String;)V
  454. throw v0
  455. .line 348
  456. :cond_0
  457. iget-boolean v0, p2, Landroid/content/pm/ProviderInfo;->grantUriPermissions:Z
  458. if-nez v0, :cond_1
  459. .line 349
  460. new-instance v0, Ljava/lang/SecurityException;
  461. const-string v1, "Provider must grant uri permissions"
  462. invoke-direct {v0, v1}, Ljava/lang/SecurityException;-><init>(Ljava/lang/String;)V
  463. throw v0
  464. .line 352
  465. :cond_1
  466. iget-object v0, p2, Landroid/content/pm/ProviderInfo;->authority:Ljava/lang/String;
  467. invoke-static {p1, v0}, Landroid/support/v4/content/FileProvider;->getPathStrategy(Landroid/content/Context;Ljava/lang/String;)Landroid/support/v4/content/FileProvider$PathStrategy;
  468. move-result-object v0
  469. iput-object v0, p0, Landroid/support/v4/content/FileProvider;->mStrategy:Landroid/support/v4/content/FileProvider$PathStrategy;
  470. .line 353
  471. return-void
  472. .end method
  473. .method public delete(Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I
  474. .locals 2
  475. .param p1, "uri" # Landroid/net/Uri;
  476. .param p2, "selection" # Ljava/lang/String;
  477. .param p3, "selectionArgs" # [Ljava/lang/String;
  478. .prologue
  479. .line 497
  480. iget-object v1, p0, Landroid/support/v4/content/FileProvider;->mStrategy:Landroid/support/v4/content/FileProvider$PathStrategy;
  481. invoke-interface {v1, p1}, Landroid/support/v4/content/FileProvider$PathStrategy;->getFileForUri(Landroid/net/Uri;)Ljava/io/File;
  482. move-result-object v0
  483. .line 498
  484. .local v0, "file":Ljava/io/File;
  485. invoke-virtual {v0}, Ljava/io/File;->delete()Z
  486. move-result v1
  487. if-eqz v1, :cond_0
  488. const/4 v1, 0x1
  489. :goto_0
  490. return v1
  491. :cond_0
  492. const/4 v1, 0x0
  493. goto :goto_0
  494. .end method
  495. .method public getType(Landroid/net/Uri;)Ljava/lang/String;
  496. .locals 6
  497. .param p1, "uri" # Landroid/net/Uri;
  498. .prologue
  499. .line 451
  500. iget-object v4, p0, Landroid/support/v4/content/FileProvider;->mStrategy:Landroid/support/v4/content/FileProvider$PathStrategy;
  501. invoke-interface {v4, p1}, Landroid/support/v4/content/FileProvider$PathStrategy;->getFileForUri(Landroid/net/Uri;)Ljava/io/File;
  502. move-result-object v1
  503. .line 453
  504. .local v1, "file":Ljava/io/File;
  505. invoke-virtual {v1}, Ljava/io/File;->getName()Ljava/lang/String;
  506. move-result-object v4
  507. const/16 v5, 0x2e
  508. invoke-virtual {v4, v5}, Ljava/lang/String;->lastIndexOf(I)I
  509. move-result v2
  510. .line 454
  511. .local v2, "lastDot":I
  512. if-ltz v2, :cond_0
  513. .line 455
  514. invoke-virtual {v1}, Ljava/io/File;->getName()Ljava/lang/String;
  515. move-result-object v4
  516. add-int/lit8 v5, v2, 0x1
  517. invoke-virtual {v4, v5}, Ljava/lang/String;->substring(I)Ljava/lang/String;
  518. move-result-object v0
  519. .line 456
  520. .local v0, "extension":Ljava/lang/String;
  521. invoke-static {}, Landroid/webkit/MimeTypeMap;->getSingleton()Landroid/webkit/MimeTypeMap;
  522. move-result-object v4
  523. invoke-virtual {v4, v0}, Landroid/webkit/MimeTypeMap;->getMimeTypeFromExtension(Ljava/lang/String;)Ljava/lang/String;
  524. move-result-object v3
  525. .line 457
  526. .local v3, "mime":Ljava/lang/String;
  527. if-eqz v3, :cond_0
  528. .line 462
  529. .end local v0 # "extension":Ljava/lang/String;
  530. .end local v3 # "mime":Ljava/lang/String;
  531. :goto_0
  532. return-object v3
  533. :cond_0
  534. const-string v3, "application/octet-stream"
  535. goto :goto_0
  536. .end method
  537. .method public insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;
  538. .locals 2
  539. .param p1, "uri" # Landroid/net/Uri;
  540. .param p2, "values" # Landroid/content/ContentValues;
  541. .prologue
  542. .line 471
  543. new-instance v0, Ljava/lang/UnsupportedOperationException;
  544. const-string v1, "No external inserts"
  545. invoke-direct {v0, v1}, Ljava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;)V
  546. throw v0
  547. .end method
  548. .method public onCreate()Z
  549. .locals 1
  550. .prologue
  551. .line 330
  552. const/4 v0, 0x1
  553. return v0
  554. .end method
  555. .method public openFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
  556. .locals 3
  557. .param p1, "uri" # Landroid/net/Uri;
  558. .param p2, "mode" # Ljava/lang/String;
  559. .annotation system Ldalvik/annotation/Throws;
  560. value = {
  561. Ljava/io/FileNotFoundException;
  562. }
  563. .end annotation
  564. .prologue
  565. .line 519
  566. iget-object v2, p0, Landroid/support/v4/content/FileProvider;->mStrategy:Landroid/support/v4/content/FileProvider$PathStrategy;
  567. invoke-interface {v2, p1}, Landroid/support/v4/content/FileProvider$PathStrategy;->getFileForUri(Landroid/net/Uri;)Ljava/io/File;
  568. move-result-object v0
  569. .line 520
  570. .local v0, "file":Ljava/io/File;
  571. invoke-static {p2}, Landroid/support/v4/content/FileProvider;->modeToMode(Ljava/lang/String;)I
  572. move-result v1
  573. .line 521
  574. .local v1, "fileMode":I
  575. invoke-static {v0, v1}, Landroid/os/ParcelFileDescriptor;->open(Ljava/io/File;I)Landroid/os/ParcelFileDescriptor;
  576. move-result-object v2
  577. return-object v2
  578. .end method
  579. .method public query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
  580. .locals 12
  581. .param p1, "uri" # Landroid/net/Uri;
  582. .param p2, "projection" # [Ljava/lang/String;
  583. .param p3, "selection" # Ljava/lang/String;
  584. .param p4, "selectionArgs" # [Ljava/lang/String;
  585. .param p5, "sortOrder" # Ljava/lang/String;
  586. .prologue
  587. .line 412
  588. iget-object v10, p0, Landroid/support/v4/content/FileProvider;->mStrategy:Landroid/support/v4/content/FileProvider$PathStrategy;
  589. invoke-interface {v10, p1}, Landroid/support/v4/content/FileProvider$PathStrategy;->getFileForUri(Landroid/net/Uri;)Ljava/io/File;
  590. move-result-object v4
  591. .line 414
  592. .local v4, "file":Ljava/io/File;
  593. if-nez p2, :cond_0
  594. .line 415
  595. sget-object p2, Landroid/support/v4/content/FileProvider;->COLUMNS:[Ljava/lang/String;
  596. .line 418
  597. :cond_0
  598. array-length v10, p2
  599. new-array v2, v10, [Ljava/lang/String;
  600. .line 419
  601. .local v2, "cols":[Ljava/lang/String;
  602. array-length v10, p2
  603. new-array v9, v10, [Ljava/lang/Object;
  604. .line 420
  605. .local v9, "values":[Ljava/lang/Object;
  606. const/4 v5, 0x0
  607. .line 421
  608. .local v5, "i":I
  609. move-object v0, p2
  610. .local v0, "arr$":[Ljava/lang/String;
  611. array-length v8, v0
  612. .local v8, "len$":I
  613. const/4 v7, 0x0
  614. .local v7, "i$":I
  615. move v6, v5
  616. .end local v5 # "i":I
  617. .local v6, "i":I
  618. :goto_0
  619. if-ge v7, v8, :cond_2
  620. aget-object v1, v0, v7
  621. .line 422
  622. .local v1, "col":Ljava/lang/String;
  623. const-string v10, "_display_name"
  624. invoke-virtual {v10, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  625. move-result v10
  626. if-eqz v10, :cond_1
  627. .line 423
  628. const-string v10, "_display_name"
  629. aput-object v10, v2, v6
  630. .line 424
  631. add-int/lit8 v5, v6, 0x1
  632. .end local v6 # "i":I
  633. .restart local v5 # "i":I
  634. invoke-virtual {v4}, Ljava/io/File;->getName()Ljava/lang/String;
  635. move-result-object v10
  636. aput-object v10, v9, v6
  637. .line 421
  638. :goto_1
  639. add-int/lit8 v7, v7, 0x1
  640. move v6, v5
  641. .end local v5 # "i":I
  642. .restart local v6 # "i":I
  643. goto :goto_0
  644. .line 425
  645. :cond_1
  646. const-string v10, "_size"
  647. invoke-virtual {v10, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  648. move-result v10
  649. if-eqz v10, :cond_3
  650. .line 426
  651. const-string v10, "_size"
  652. aput-object v10, v2, v6
  653. .line 427
  654. add-int/lit8 v5, v6, 0x1
  655. .end local v6 # "i":I
  656. .restart local v5 # "i":I
  657. invoke-virtual {v4}, Ljava/io/File;->length()J
  658. move-result-wide v10
  659. invoke-static {v10, v11}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
  660. move-result-object v10
  661. aput-object v10, v9, v6
  662. goto :goto_1
  663. .line 431
  664. .end local v1 # "col":Ljava/lang/String;
  665. .end local v5 # "i":I
  666. .restart local v6 # "i":I
  667. :cond_2
  668. invoke-static {v2, v6}, Landroid/support/v4/content/FileProvider;->copyOf([Ljava/lang/String;I)[Ljava/lang/String;
  669. move-result-object v2
  670. .line 432
  671. invoke-static {v9, v6}, Landroid/support/v4/content/FileProvider;->copyOf([Ljava/lang/Object;I)[Ljava/lang/Object;
  672. move-result-object v9
  673. .line 434
  674. new-instance v3, Landroid/database/MatrixCursor;
  675. const/4 v10, 0x1
  676. invoke-direct {v3, v2, v10}, Landroid/database/MatrixCursor;-><init>([Ljava/lang/String;I)V
  677. .line 435
  678. .local v3, "cursor":Landroid/database/MatrixCursor;
  679. invoke-virtual {v3, v9}, Landroid/database/MatrixCursor;->addRow([Ljava/lang/Object;)V
  680. .line 436
  681. return-object v3
  682. .end local v3 # "cursor":Landroid/database/MatrixCursor;
  683. .restart local v1 # "col":Ljava/lang/String;
  684. :cond_3
  685. move v5, v6
  686. .end local v6 # "i":I
  687. .restart local v5 # "i":I
  688. goto :goto_1
  689. .end method
  690. .method public update(Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I
  691. .locals 2
  692. .param p1, "uri" # Landroid/net/Uri;
  693. .param p2, "values" # Landroid/content/ContentValues;
  694. .param p3, "selection" # Ljava/lang/String;
  695. .param p4, "selectionArgs" # [Ljava/lang/String;
  696. .prologue
  697. .line 480
  698. new-instance v0, Ljava/lang/UnsupportedOperationException;
  699. const-string v1, "No external updates"
  700. invoke-direct {v0, v1}, Ljava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;)V
  701. throw v0
  702. .end method