AdapterHelper.smali 49 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862
  1. .class Landroid/support/v7/widget/AdapterHelper;
  2. .super Ljava/lang/Object;
  3. .source ""
  4. # interfaces
  5. .implements Landroid/support/v7/widget/OpReorderer$Callback;
  6. # annotations
  7. .annotation system Ldalvik/annotation/MemberClasses;
  8. value = {
  9. Landroid/support/v7/widget/AdapterHelper$Callback;,
  10. Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  11. }
  12. .end annotation
  13. # static fields
  14. .field private static final DEBUG:Z = false
  15. .field static final POSITION_TYPE_INVISIBLE:I = 0x0
  16. .field static final POSITION_TYPE_NEW_OR_LAID_OUT:I = 0x1
  17. .field private static final TAG:Ljava/lang/String; = "AHT"
  18. # instance fields
  19. .field final mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  20. .field final mDisableRecycler:Z
  21. .field private mExistingUpdateTypes:I
  22. .field mOnItemProcessedCallback:Ljava/lang/Runnable;
  23. .field final mOpReorderer:Landroid/support/v7/widget/OpReorderer;
  24. .field final mPendingUpdates:Ljava/util/ArrayList;
  25. .annotation system Ldalvik/annotation/Signature;
  26. value = {
  27. "Ljava/util/ArrayList<",
  28. "Landroid/support/v7/widget/AdapterHelper$UpdateOp;",
  29. ">;"
  30. }
  31. .end annotation
  32. .end field
  33. .field final mPostponedList:Ljava/util/ArrayList;
  34. .annotation system Ldalvik/annotation/Signature;
  35. value = {
  36. "Ljava/util/ArrayList<",
  37. "Landroid/support/v7/widget/AdapterHelper$UpdateOp;",
  38. ">;"
  39. }
  40. .end annotation
  41. .end field
  42. .field private mUpdateOpPool:Landroid/support/v4/util/Pools$Pool;
  43. .annotation system Ldalvik/annotation/Signature;
  44. value = {
  45. "Landroid/support/v4/util/Pools$Pool<",
  46. "Landroid/support/v7/widget/AdapterHelper$UpdateOp;",
  47. ">;"
  48. }
  49. .end annotation
  50. .end field
  51. # direct methods
  52. .method constructor <init>(Landroid/support/v7/widget/AdapterHelper$Callback;)V
  53. .locals 1
  54. const/4 v0, 0x0
  55. invoke-direct {p0, p1, v0}, Landroid/support/v7/widget/AdapterHelper;-><init>(Landroid/support/v7/widget/AdapterHelper$Callback;Z)V
  56. return-void
  57. .end method
  58. .method constructor <init>(Landroid/support/v7/widget/AdapterHelper$Callback;Z)V
  59. .locals 2
  60. invoke-direct {p0}, Ljava/lang/Object;-><init>()V
  61. new-instance v0, Landroid/support/v4/util/Pools$SimplePool;
  62. const/16 v1, 0x1e
  63. invoke-direct {v0, v1}, Landroid/support/v4/util/Pools$SimplePool;-><init>(I)V
  64. iput-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mUpdateOpPool:Landroid/support/v4/util/Pools$Pool;
  65. new-instance v0, Ljava/util/ArrayList;
  66. invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
  67. iput-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  68. new-instance v0, Ljava/util/ArrayList;
  69. invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
  70. iput-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPostponedList:Ljava/util/ArrayList;
  71. const/4 v0, 0x0
  72. iput v0, p0, Landroid/support/v7/widget/AdapterHelper;->mExistingUpdateTypes:I
  73. iput-object p1, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  74. iput-boolean p2, p0, Landroid/support/v7/widget/AdapterHelper;->mDisableRecycler:Z
  75. new-instance p1, Landroid/support/v7/widget/OpReorderer;
  76. invoke-direct {p1, p0}, Landroid/support/v7/widget/OpReorderer;-><init>(Landroid/support/v7/widget/OpReorderer$Callback;)V
  77. iput-object p1, p0, Landroid/support/v7/widget/AdapterHelper;->mOpReorderer:Landroid/support/v7/widget/OpReorderer;
  78. return-void
  79. .end method
  80. .method private applyAdd(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  81. .locals 0
  82. invoke-direct {p0, p1}, Landroid/support/v7/widget/AdapterHelper;->postponeAndUpdateViewHolders(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  83. return-void
  84. .end method
  85. .method private applyMove(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  86. .locals 0
  87. invoke-direct {p0, p1}, Landroid/support/v7/widget/AdapterHelper;->postponeAndUpdateViewHolders(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  88. return-void
  89. .end method
  90. .method private applyRemove(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  91. .locals 10
  92. iget v0, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  93. iget v1, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  94. add-int/2addr v1, v0
  95. const/4 v2, 0x0
  96. const/4 v3, -0x1
  97. move v3, v1
  98. const/4 v4, 0x0
  99. const/4 v5, -0x1
  100. move v1, v0
  101. :goto_0
  102. const/4 v6, 0x0
  103. const/4 v7, 0x2
  104. if-ge v1, v3, :cond_5
  105. iget-object v8, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  106. invoke-interface {v8, v1}, Landroid/support/v7/widget/AdapterHelper$Callback;->findViewHolder(I)Landroid/support/v7/widget/RecyclerView$ViewHolder;
  107. move-result-object v8
  108. const/4 v9, 0x1
  109. if-nez v8, :cond_2
  110. invoke-direct {p0, v1}, Landroid/support/v7/widget/AdapterHelper;->canFindInPreLayout(I)Z
  111. move-result v8
  112. if-eqz v8, :cond_0
  113. goto :goto_2
  114. :cond_0
  115. if-ne v5, v9, :cond_1
  116. invoke-virtual {p0, v7, v0, v4, v6}, Landroid/support/v7/widget/AdapterHelper;->obtainUpdateOp(IIILjava/lang/Object;)Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  117. move-result-object v5
  118. invoke-direct {p0, v5}, Landroid/support/v7/widget/AdapterHelper;->postponeAndUpdateViewHolders(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  119. const/4 v5, 0x1
  120. goto :goto_1
  121. :cond_1
  122. const/4 v5, 0x0
  123. :goto_1
  124. const/4 v6, 0x0
  125. goto :goto_4
  126. :cond_2
  127. :goto_2
  128. if-nez v5, :cond_3
  129. invoke-virtual {p0, v7, v0, v4, v6}, Landroid/support/v7/widget/AdapterHelper;->obtainUpdateOp(IIILjava/lang/Object;)Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  130. move-result-object v5
  131. invoke-direct {p0, v5}, Landroid/support/v7/widget/AdapterHelper;->dispatchAndUpdateViewHolders(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  132. const/4 v5, 0x1
  133. goto :goto_3
  134. :cond_3
  135. const/4 v5, 0x0
  136. :goto_3
  137. const/4 v6, 0x1
  138. :goto_4
  139. if-eqz v5, :cond_4
  140. sub-int/2addr v1, v4
  141. sub-int/2addr v3, v4
  142. const/4 v4, 0x1
  143. goto :goto_5
  144. :cond_4
  145. add-int/lit8 v4, v4, 0x1
  146. :goto_5
  147. add-int/2addr v1, v9
  148. move v5, v6
  149. goto :goto_0
  150. :cond_5
  151. iget v1, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  152. if-eq v4, v1, :cond_6
  153. invoke-virtual {p0, p1}, Landroid/support/v7/widget/AdapterHelper;->recycleUpdateOp(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  154. invoke-virtual {p0, v7, v0, v4, v6}, Landroid/support/v7/widget/AdapterHelper;->obtainUpdateOp(IIILjava/lang/Object;)Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  155. move-result-object p1
  156. :cond_6
  157. if-nez v5, :cond_7
  158. invoke-direct {p0, p1}, Landroid/support/v7/widget/AdapterHelper;->dispatchAndUpdateViewHolders(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  159. goto :goto_6
  160. :cond_7
  161. invoke-direct {p0, p1}, Landroid/support/v7/widget/AdapterHelper;->postponeAndUpdateViewHolders(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  162. :goto_6
  163. return-void
  164. .end method
  165. .method private applyUpdate(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  166. .locals 9
  167. iget v0, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  168. iget v1, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  169. add-int/2addr v1, v0
  170. const/4 v2, 0x0
  171. const/4 v3, -0x1
  172. move v4, v0
  173. const/4 v3, 0x0
  174. const/4 v5, -0x1
  175. :goto_0
  176. const/4 v6, 0x4
  177. if-ge v0, v1, :cond_4
  178. iget-object v7, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  179. invoke-interface {v7, v0}, Landroid/support/v7/widget/AdapterHelper$Callback;->findViewHolder(I)Landroid/support/v7/widget/RecyclerView$ViewHolder;
  180. move-result-object v7
  181. const/4 v8, 0x1
  182. if-nez v7, :cond_2
  183. invoke-direct {p0, v0}, Landroid/support/v7/widget/AdapterHelper;->canFindInPreLayout(I)Z
  184. move-result v7
  185. if-eqz v7, :cond_0
  186. goto :goto_1
  187. :cond_0
  188. if-ne v5, v8, :cond_1
  189. iget-object v5, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->payload:Ljava/lang/Object;
  190. invoke-virtual {p0, v6, v4, v3, v5}, Landroid/support/v7/widget/AdapterHelper;->obtainUpdateOp(IIILjava/lang/Object;)Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  191. move-result-object v3
  192. invoke-direct {p0, v3}, Landroid/support/v7/widget/AdapterHelper;->postponeAndUpdateViewHolders(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  193. move v4, v0
  194. const/4 v3, 0x0
  195. :cond_1
  196. const/4 v5, 0x0
  197. goto :goto_2
  198. :cond_2
  199. :goto_1
  200. if-nez v5, :cond_3
  201. iget-object v5, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->payload:Ljava/lang/Object;
  202. invoke-virtual {p0, v6, v4, v3, v5}, Landroid/support/v7/widget/AdapterHelper;->obtainUpdateOp(IIILjava/lang/Object;)Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  203. move-result-object v3
  204. invoke-direct {p0, v3}, Landroid/support/v7/widget/AdapterHelper;->dispatchAndUpdateViewHolders(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  205. move v4, v0
  206. const/4 v3, 0x0
  207. :cond_3
  208. const/4 v5, 0x1
  209. :goto_2
  210. add-int/2addr v3, v8
  211. add-int/lit8 v0, v0, 0x1
  212. goto :goto_0
  213. :cond_4
  214. iget v0, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  215. if-eq v3, v0, :cond_5
  216. iget-object v0, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->payload:Ljava/lang/Object;
  217. invoke-virtual {p0, p1}, Landroid/support/v7/widget/AdapterHelper;->recycleUpdateOp(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  218. invoke-virtual {p0, v6, v4, v3, v0}, Landroid/support/v7/widget/AdapterHelper;->obtainUpdateOp(IIILjava/lang/Object;)Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  219. move-result-object p1
  220. :cond_5
  221. if-nez v5, :cond_6
  222. invoke-direct {p0, p1}, Landroid/support/v7/widget/AdapterHelper;->dispatchAndUpdateViewHolders(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  223. goto :goto_3
  224. :cond_6
  225. invoke-direct {p0, p1}, Landroid/support/v7/widget/AdapterHelper;->postponeAndUpdateViewHolders(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  226. :goto_3
  227. return-void
  228. .end method
  229. .method private canFindInPreLayout(I)Z
  230. .locals 7
  231. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPostponedList:Ljava/util/ArrayList;
  232. invoke-virtual {v0}, Ljava/util/ArrayList;->size()I
  233. move-result v0
  234. const/4 v1, 0x0
  235. const/4 v2, 0x0
  236. :goto_0
  237. if-ge v2, v0, :cond_3
  238. iget-object v3, p0, Landroid/support/v7/widget/AdapterHelper;->mPostponedList:Ljava/util/ArrayList;
  239. invoke-virtual {v3, v2}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;
  240. move-result-object v3
  241. check-cast v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  242. iget v4, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->cmd:I
  243. const/16 v5, 0x8
  244. const/4 v6, 0x1
  245. if-ne v4, v5, :cond_0
  246. iget v3, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  247. add-int/lit8 v4, v2, 0x1
  248. invoke-virtual {p0, v3, v4}, Landroid/support/v7/widget/AdapterHelper;->findPositionOffset(II)I
  249. move-result v3
  250. if-ne v3, p1, :cond_2
  251. return v6
  252. :cond_0
  253. if-ne v4, v6, :cond_2
  254. iget v4, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  255. iget v3, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  256. add-int/2addr v3, v4
  257. :goto_1
  258. if-ge v4, v3, :cond_2
  259. add-int/lit8 v5, v2, 0x1
  260. invoke-virtual {p0, v4, v5}, Landroid/support/v7/widget/AdapterHelper;->findPositionOffset(II)I
  261. move-result v5
  262. if-ne v5, p1, :cond_1
  263. return v6
  264. :cond_1
  265. add-int/lit8 v4, v4, 0x1
  266. goto :goto_1
  267. :cond_2
  268. add-int/lit8 v2, v2, 0x1
  269. goto :goto_0
  270. :cond_3
  271. return v1
  272. .end method
  273. .method private dispatchAndUpdateViewHolders(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  274. .locals 12
  275. iget v0, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->cmd:I
  276. const/4 v1, 0x1
  277. if-eq v0, v1, :cond_9
  278. const/16 v2, 0x8
  279. if-eq v0, v2, :cond_9
  280. iget v2, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  281. invoke-direct {p0, v2, v0}, Landroid/support/v7/widget/AdapterHelper;->updatePositionWithPostponed(II)I
  282. move-result v0
  283. iget v2, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  284. iget v3, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->cmd:I
  285. const/4 v4, 0x2
  286. const/4 v5, 0x4
  287. const/4 v6, 0x0
  288. if-eq v3, v4, :cond_1
  289. if-ne v3, v5, :cond_0
  290. const/4 v3, 0x1
  291. goto :goto_0
  292. :cond_0
  293. new-instance v0, Ljava/lang/IllegalArgumentException;
  294. new-instance v1, Ljava/lang/StringBuilder;
  295. invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
  296. const-string v2, "op should be remove or update."
  297. invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  298. invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
  299. invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
  300. move-result-object p1
  301. invoke-direct {v0, p1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
  302. throw v0
  303. :cond_1
  304. const/4 v3, 0x0
  305. :goto_0
  306. move v7, v0
  307. move v8, v2
  308. const/4 v0, 0x1
  309. const/4 v2, 0x1
  310. :goto_1
  311. iget v9, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  312. if-ge v0, v9, :cond_7
  313. iget v9, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  314. mul-int v10, v3, v0
  315. add-int/2addr v9, v10
  316. iget v10, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->cmd:I
  317. invoke-direct {p0, v9, v10}, Landroid/support/v7/widget/AdapterHelper;->updatePositionWithPostponed(II)I
  318. move-result v9
  319. iget v10, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->cmd:I
  320. if-eq v10, v4, :cond_4
  321. if-eq v10, v5, :cond_3
  322. :cond_2
  323. const/4 v10, 0x0
  324. goto :goto_3
  325. :cond_3
  326. add-int/lit8 v10, v7, 0x1
  327. if-ne v9, v10, :cond_2
  328. :goto_2
  329. const/4 v10, 0x1
  330. goto :goto_3
  331. :cond_4
  332. if-ne v9, v7, :cond_2
  333. goto :goto_2
  334. :goto_3
  335. if-eqz v10, :cond_5
  336. add-int/lit8 v2, v2, 0x1
  337. goto :goto_4
  338. :cond_5
  339. iget v10, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->cmd:I
  340. iget-object v11, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->payload:Ljava/lang/Object;
  341. invoke-virtual {p0, v10, v7, v2, v11}, Landroid/support/v7/widget/AdapterHelper;->obtainUpdateOp(IIILjava/lang/Object;)Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  342. move-result-object v7
  343. invoke-virtual {p0, v7, v8}, Landroid/support/v7/widget/AdapterHelper;->dispatchFirstPassAndUpdateViewHolders(Landroid/support/v7/widget/AdapterHelper$UpdateOp;I)V
  344. invoke-virtual {p0, v7}, Landroid/support/v7/widget/AdapterHelper;->recycleUpdateOp(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  345. iget v7, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->cmd:I
  346. if-ne v7, v5, :cond_6
  347. add-int/2addr v8, v2
  348. :cond_6
  349. move v7, v9
  350. const/4 v2, 0x1
  351. :goto_4
  352. add-int/lit8 v0, v0, 0x1
  353. goto :goto_1
  354. :cond_7
  355. iget-object v0, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->payload:Ljava/lang/Object;
  356. invoke-virtual {p0, p1}, Landroid/support/v7/widget/AdapterHelper;->recycleUpdateOp(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  357. if-lez v2, :cond_8
  358. iget p1, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->cmd:I
  359. invoke-virtual {p0, p1, v7, v2, v0}, Landroid/support/v7/widget/AdapterHelper;->obtainUpdateOp(IIILjava/lang/Object;)Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  360. move-result-object p1
  361. invoke-virtual {p0, p1, v8}, Landroid/support/v7/widget/AdapterHelper;->dispatchFirstPassAndUpdateViewHolders(Landroid/support/v7/widget/AdapterHelper$UpdateOp;I)V
  362. invoke-virtual {p0, p1}, Landroid/support/v7/widget/AdapterHelper;->recycleUpdateOp(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  363. :cond_8
  364. return-void
  365. :cond_9
  366. new-instance p1, Ljava/lang/IllegalArgumentException;
  367. const-string v0, "should not dispatch add or move for pre layout"
  368. invoke-direct {p1, v0}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
  369. goto :goto_6
  370. :goto_5
  371. throw p1
  372. :goto_6
  373. goto :goto_5
  374. .end method
  375. .method private postponeAndUpdateViewHolders(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  376. .locals 3
  377. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPostponedList:Ljava/util/ArrayList;
  378. invoke-virtual {v0, p1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
  379. iget v0, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->cmd:I
  380. const/4 v1, 0x1
  381. if-eq v0, v1, :cond_3
  382. const/4 v1, 0x2
  383. if-eq v0, v1, :cond_2
  384. const/4 v1, 0x4
  385. if-eq v0, v1, :cond_1
  386. const/16 v1, 0x8
  387. if-ne v0, v1, :cond_0
  388. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  389. iget v1, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  390. iget p1, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  391. invoke-interface {v0, v1, p1}, Landroid/support/v7/widget/AdapterHelper$Callback;->offsetPositionsForMove(II)V
  392. goto :goto_0
  393. :cond_0
  394. new-instance v0, Ljava/lang/IllegalArgumentException;
  395. new-instance v1, Ljava/lang/StringBuilder;
  396. invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
  397. const-string v2, "Unknown update op type for "
  398. invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  399. invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
  400. invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
  401. move-result-object p1
  402. invoke-direct {v0, p1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
  403. throw v0
  404. :cond_1
  405. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  406. iget v1, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  407. iget v2, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  408. iget-object p1, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->payload:Ljava/lang/Object;
  409. invoke-interface {v0, v1, v2, p1}, Landroid/support/v7/widget/AdapterHelper$Callback;->markViewHoldersUpdated(IILjava/lang/Object;)V
  410. goto :goto_0
  411. :cond_2
  412. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  413. iget v1, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  414. iget p1, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  415. invoke-interface {v0, v1, p1}, Landroid/support/v7/widget/AdapterHelper$Callback;->offsetPositionsForRemovingLaidOutOrNewView(II)V
  416. goto :goto_0
  417. :cond_3
  418. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  419. iget v1, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  420. iget p1, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  421. invoke-interface {v0, v1, p1}, Landroid/support/v7/widget/AdapterHelper$Callback;->offsetPositionsForAdd(II)V
  422. :goto_0
  423. return-void
  424. .end method
  425. .method private updatePositionWithPostponed(II)I
  426. .locals 7
  427. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPostponedList:Ljava/util/ArrayList;
  428. invoke-virtual {v0}, Ljava/util/ArrayList;->size()I
  429. move-result v0
  430. const/4 v1, 0x1
  431. sub-int/2addr v0, v1
  432. :goto_0
  433. const/16 v2, 0x8
  434. if-ltz v0, :cond_d
  435. iget-object v3, p0, Landroid/support/v7/widget/AdapterHelper;->mPostponedList:Ljava/util/ArrayList;
  436. invoke-virtual {v3, v0}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;
  437. move-result-object v3
  438. check-cast v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  439. iget v4, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->cmd:I
  440. const/4 v5, 0x2
  441. if-ne v4, v2, :cond_8
  442. iget v2, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  443. iget v4, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  444. if-ge v2, v4, :cond_0
  445. goto :goto_1
  446. :cond_0
  447. move v6, v4
  448. move v4, v2
  449. move v2, v6
  450. :goto_1
  451. if-lt p1, v2, :cond_6
  452. if-gt p1, v4, :cond_6
  453. iget v4, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  454. if-ne v2, v4, :cond_3
  455. if-ne p2, v1, :cond_1
  456. iget v2, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  457. add-int/2addr v2, v1
  458. :goto_2
  459. iput v2, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  460. goto :goto_3
  461. :cond_1
  462. if-ne p2, v5, :cond_2
  463. iget v2, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  464. sub-int/2addr v2, v1
  465. goto :goto_2
  466. :cond_2
  467. :goto_3
  468. add-int/lit8 p1, p1, 0x1
  469. goto :goto_8
  470. :cond_3
  471. if-ne p2, v1, :cond_4
  472. add-int/lit8 v4, v4, 0x1
  473. :goto_4
  474. iput v4, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  475. goto :goto_5
  476. :cond_4
  477. if-ne p2, v5, :cond_5
  478. add-int/lit8 v4, v4, -0x1
  479. goto :goto_4
  480. :cond_5
  481. :goto_5
  482. add-int/lit8 p1, p1, -0x1
  483. goto :goto_8
  484. :cond_6
  485. iget v2, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  486. if-ge p1, v2, :cond_c
  487. if-ne p2, v1, :cond_7
  488. add-int/lit8 v2, v2, 0x1
  489. iput v2, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  490. iget v2, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  491. add-int/2addr v2, v1
  492. :goto_6
  493. iput v2, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  494. goto :goto_8
  495. :cond_7
  496. if-ne p2, v5, :cond_c
  497. add-int/lit8 v2, v2, -0x1
  498. iput v2, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  499. iget v2, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  500. sub-int/2addr v2, v1
  501. goto :goto_6
  502. :cond_8
  503. iget v2, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  504. if-gt v2, p1, :cond_a
  505. if-ne v4, v1, :cond_9
  506. iget v2, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  507. sub-int/2addr p1, v2
  508. goto :goto_8
  509. :cond_9
  510. if-ne v4, v5, :cond_c
  511. iget v2, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  512. add-int/2addr p1, v2
  513. goto :goto_8
  514. :cond_a
  515. if-ne p2, v1, :cond_b
  516. add-int/lit8 v2, v2, 0x1
  517. :goto_7
  518. iput v2, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  519. goto :goto_8
  520. :cond_b
  521. if-ne p2, v5, :cond_c
  522. add-int/lit8 v2, v2, -0x1
  523. goto :goto_7
  524. :cond_c
  525. :goto_8
  526. add-int/lit8 v0, v0, -0x1
  527. goto :goto_0
  528. :cond_d
  529. iget-object p2, p0, Landroid/support/v7/widget/AdapterHelper;->mPostponedList:Ljava/util/ArrayList;
  530. invoke-virtual {p2}, Ljava/util/ArrayList;->size()I
  531. move-result p2
  532. sub-int/2addr p2, v1
  533. :goto_9
  534. if-ltz p2, :cond_11
  535. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPostponedList:Ljava/util/ArrayList;
  536. invoke-virtual {v0, p2}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;
  537. move-result-object v0
  538. check-cast v0, Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  539. iget v1, v0, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->cmd:I
  540. if-ne v1, v2, :cond_e
  541. iget v1, v0, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  542. iget v3, v0, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  543. if-eq v1, v3, :cond_f
  544. if-gez v1, :cond_10
  545. goto :goto_a
  546. :cond_e
  547. iget v1, v0, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  548. if-gtz v1, :cond_10
  549. :cond_f
  550. :goto_a
  551. iget-object v1, p0, Landroid/support/v7/widget/AdapterHelper;->mPostponedList:Ljava/util/ArrayList;
  552. invoke-virtual {v1, p2}, Ljava/util/ArrayList;->remove(I)Ljava/lang/Object;
  553. invoke-virtual {p0, v0}, Landroid/support/v7/widget/AdapterHelper;->recycleUpdateOp(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  554. :cond_10
  555. add-int/lit8 p2, p2, -0x1
  556. goto :goto_9
  557. :cond_11
  558. return p1
  559. .end method
  560. # virtual methods
  561. .method varargs addUpdateOp([Landroid/support/v7/widget/AdapterHelper$UpdateOp;)Landroid/support/v7/widget/AdapterHelper;
  562. .locals 1
  563. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  564. invoke-static {v0, p1}, Ljava/util/Collections;->addAll(Ljava/util/Collection;[Ljava/lang/Object;)Z
  565. return-object p0
  566. .end method
  567. .method public applyPendingUpdatesToPosition(I)I
  568. .locals 5
  569. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  570. invoke-virtual {v0}, Ljava/util/ArrayList;->size()I
  571. move-result v0
  572. const/4 v1, 0x0
  573. :goto_0
  574. if-ge v1, v0, :cond_7
  575. iget-object v2, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  576. invoke-virtual {v2, v1}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;
  577. move-result-object v2
  578. check-cast v2, Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  579. iget v3, v2, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->cmd:I
  580. const/4 v4, 0x1
  581. if-eq v3, v4, :cond_5
  582. const/4 v4, 0x2
  583. if-eq v3, v4, :cond_3
  584. const/16 v4, 0x8
  585. if-eq v3, v4, :cond_0
  586. goto :goto_1
  587. :cond_0
  588. iget v3, v2, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  589. if-ne v3, p1, :cond_1
  590. iget p1, v2, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  591. goto :goto_1
  592. :cond_1
  593. if-ge v3, p1, :cond_2
  594. add-int/lit8 p1, p1, -0x1
  595. :cond_2
  596. iget v2, v2, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  597. if-gt v2, p1, :cond_6
  598. add-int/lit8 p1, p1, 0x1
  599. goto :goto_1
  600. :cond_3
  601. iget v3, v2, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  602. if-gt v3, p1, :cond_6
  603. iget v2, v2, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  604. add-int/2addr v3, v2
  605. if-le v3, p1, :cond_4
  606. const/4 p1, -0x1
  607. return p1
  608. :cond_4
  609. sub-int/2addr p1, v2
  610. goto :goto_1
  611. :cond_5
  612. iget v3, v2, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  613. if-gt v3, p1, :cond_6
  614. iget v2, v2, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  615. add-int/2addr p1, v2
  616. :cond_6
  617. :goto_1
  618. add-int/lit8 v1, v1, 0x1
  619. goto :goto_0
  620. :cond_7
  621. return p1
  622. .end method
  623. .method consumePostponedUpdates()V
  624. .locals 5
  625. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPostponedList:Ljava/util/ArrayList;
  626. invoke-virtual {v0}, Ljava/util/ArrayList;->size()I
  627. move-result v0
  628. const/4 v1, 0x0
  629. const/4 v2, 0x0
  630. :goto_0
  631. if-ge v2, v0, :cond_0
  632. iget-object v3, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  633. iget-object v4, p0, Landroid/support/v7/widget/AdapterHelper;->mPostponedList:Ljava/util/ArrayList;
  634. invoke-virtual {v4, v2}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;
  635. move-result-object v4
  636. check-cast v4, Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  637. invoke-interface {v3, v4}, Landroid/support/v7/widget/AdapterHelper$Callback;->onDispatchSecondPass(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  638. add-int/lit8 v2, v2, 0x1
  639. goto :goto_0
  640. :cond_0
  641. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPostponedList:Ljava/util/ArrayList;
  642. invoke-virtual {p0, v0}, Landroid/support/v7/widget/AdapterHelper;->recycleUpdateOpsAndClearList(Ljava/util/List;)V
  643. iput v1, p0, Landroid/support/v7/widget/AdapterHelper;->mExistingUpdateTypes:I
  644. return-void
  645. .end method
  646. .method consumeUpdatesInOnePass()V
  647. .locals 7
  648. invoke-virtual {p0}, Landroid/support/v7/widget/AdapterHelper;->consumePostponedUpdates()V
  649. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  650. invoke-virtual {v0}, Ljava/util/ArrayList;->size()I
  651. move-result v0
  652. const/4 v1, 0x0
  653. const/4 v2, 0x0
  654. :goto_0
  655. if-ge v2, v0, :cond_5
  656. iget-object v3, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  657. invoke-virtual {v3, v2}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;
  658. move-result-object v3
  659. check-cast v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  660. iget v4, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->cmd:I
  661. const/4 v5, 0x1
  662. if-eq v4, v5, :cond_3
  663. const/4 v5, 0x2
  664. if-eq v4, v5, :cond_2
  665. const/4 v5, 0x4
  666. if-eq v4, v5, :cond_1
  667. const/16 v5, 0x8
  668. if-eq v4, v5, :cond_0
  669. goto :goto_1
  670. :cond_0
  671. iget-object v4, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  672. invoke-interface {v4, v3}, Landroid/support/v7/widget/AdapterHelper$Callback;->onDispatchSecondPass(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  673. iget-object v4, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  674. iget v5, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  675. iget v3, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  676. invoke-interface {v4, v5, v3}, Landroid/support/v7/widget/AdapterHelper$Callback;->offsetPositionsForMove(II)V
  677. goto :goto_1
  678. :cond_1
  679. iget-object v4, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  680. invoke-interface {v4, v3}, Landroid/support/v7/widget/AdapterHelper$Callback;->onDispatchSecondPass(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  681. iget-object v4, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  682. iget v5, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  683. iget v6, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  684. iget-object v3, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->payload:Ljava/lang/Object;
  685. invoke-interface {v4, v5, v6, v3}, Landroid/support/v7/widget/AdapterHelper$Callback;->markViewHoldersUpdated(IILjava/lang/Object;)V
  686. goto :goto_1
  687. :cond_2
  688. iget-object v4, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  689. invoke-interface {v4, v3}, Landroid/support/v7/widget/AdapterHelper$Callback;->onDispatchSecondPass(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  690. iget-object v4, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  691. iget v5, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  692. iget v3, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  693. invoke-interface {v4, v5, v3}, Landroid/support/v7/widget/AdapterHelper$Callback;->offsetPositionsForRemovingInvisible(II)V
  694. goto :goto_1
  695. :cond_3
  696. iget-object v4, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  697. invoke-interface {v4, v3}, Landroid/support/v7/widget/AdapterHelper$Callback;->onDispatchSecondPass(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  698. iget-object v4, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  699. iget v5, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  700. iget v3, v3, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  701. invoke-interface {v4, v5, v3}, Landroid/support/v7/widget/AdapterHelper$Callback;->offsetPositionsForAdd(II)V
  702. :goto_1
  703. iget-object v3, p0, Landroid/support/v7/widget/AdapterHelper;->mOnItemProcessedCallback:Ljava/lang/Runnable;
  704. if-eqz v3, :cond_4
  705. invoke-interface {v3}, Ljava/lang/Runnable;->run()V
  706. :cond_4
  707. add-int/lit8 v2, v2, 0x1
  708. goto :goto_0
  709. :cond_5
  710. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  711. invoke-virtual {p0, v0}, Landroid/support/v7/widget/AdapterHelper;->recycleUpdateOpsAndClearList(Ljava/util/List;)V
  712. iput v1, p0, Landroid/support/v7/widget/AdapterHelper;->mExistingUpdateTypes:I
  713. return-void
  714. .end method
  715. .method dispatchFirstPassAndUpdateViewHolders(Landroid/support/v7/widget/AdapterHelper$UpdateOp;I)V
  716. .locals 2
  717. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  718. invoke-interface {v0, p1}, Landroid/support/v7/widget/AdapterHelper$Callback;->onDispatchFirstPass(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  719. iget v0, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->cmd:I
  720. const/4 v1, 0x2
  721. if-eq v0, v1, :cond_1
  722. const/4 v1, 0x4
  723. if-ne v0, v1, :cond_0
  724. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  725. iget v1, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  726. iget-object p1, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->payload:Ljava/lang/Object;
  727. invoke-interface {v0, p2, v1, p1}, Landroid/support/v7/widget/AdapterHelper$Callback;->markViewHoldersUpdated(IILjava/lang/Object;)V
  728. goto :goto_0
  729. :cond_0
  730. new-instance p1, Ljava/lang/IllegalArgumentException;
  731. const-string p2, "only remove and update ops can be dispatched in first pass"
  732. invoke-direct {p1, p2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
  733. throw p1
  734. :cond_1
  735. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mCallback:Landroid/support/v7/widget/AdapterHelper$Callback;
  736. iget p1, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  737. invoke-interface {v0, p2, p1}, Landroid/support/v7/widget/AdapterHelper$Callback;->offsetPositionsForRemovingInvisible(II)V
  738. :goto_0
  739. return-void
  740. .end method
  741. .method findPositionOffset(I)I
  742. .locals 1
  743. const/4 v0, 0x0
  744. invoke-virtual {p0, p1, v0}, Landroid/support/v7/widget/AdapterHelper;->findPositionOffset(II)I
  745. move-result p1
  746. return p1
  747. .end method
  748. .method findPositionOffset(II)I
  749. .locals 5
  750. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPostponedList:Ljava/util/ArrayList;
  751. invoke-virtual {v0}, Ljava/util/ArrayList;->size()I
  752. move-result v0
  753. :goto_0
  754. if-ge p2, v0, :cond_6
  755. iget-object v1, p0, Landroid/support/v7/widget/AdapterHelper;->mPostponedList:Ljava/util/ArrayList;
  756. invoke-virtual {v1, p2}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;
  757. move-result-object v1
  758. check-cast v1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  759. iget v2, v1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->cmd:I
  760. const/16 v3, 0x8
  761. if-ne v2, v3, :cond_2
  762. iget v2, v1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  763. if-ne v2, p1, :cond_0
  764. iget p1, v1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  765. goto :goto_1
  766. :cond_0
  767. if-ge v2, p1, :cond_1
  768. add-int/lit8 p1, p1, -0x1
  769. :cond_1
  770. iget v1, v1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  771. if-gt v1, p1, :cond_5
  772. add-int/lit8 p1, p1, 0x1
  773. goto :goto_1
  774. :cond_2
  775. iget v3, v1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  776. if-gt v3, p1, :cond_5
  777. const/4 v4, 0x2
  778. if-ne v2, v4, :cond_4
  779. iget v1, v1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  780. add-int/2addr v3, v1
  781. if-ge p1, v3, :cond_3
  782. const/4 p1, -0x1
  783. return p1
  784. :cond_3
  785. sub-int/2addr p1, v1
  786. goto :goto_1
  787. :cond_4
  788. const/4 v3, 0x1
  789. if-ne v2, v3, :cond_5
  790. iget v1, v1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  791. add-int/2addr p1, v1
  792. :cond_5
  793. :goto_1
  794. add-int/lit8 p2, p2, 0x1
  795. goto :goto_0
  796. :cond_6
  797. return p1
  798. .end method
  799. .method hasAnyUpdateTypes(I)Z
  800. .locals 1
  801. iget v0, p0, Landroid/support/v7/widget/AdapterHelper;->mExistingUpdateTypes:I
  802. and-int/2addr p1, v0
  803. if-eqz p1, :cond_0
  804. const/4 p1, 0x1
  805. goto :goto_0
  806. :cond_0
  807. const/4 p1, 0x0
  808. :goto_0
  809. return p1
  810. .end method
  811. .method hasPendingUpdates()Z
  812. .locals 1
  813. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  814. invoke-virtual {v0}, Ljava/util/ArrayList;->size()I
  815. move-result v0
  816. if-lez v0, :cond_0
  817. const/4 v0, 0x1
  818. goto :goto_0
  819. :cond_0
  820. const/4 v0, 0x0
  821. :goto_0
  822. return v0
  823. .end method
  824. .method hasUpdates()Z
  825. .locals 1
  826. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPostponedList:Ljava/util/ArrayList;
  827. invoke-virtual {v0}, Ljava/util/ArrayList;->isEmpty()Z
  828. move-result v0
  829. if-nez v0, :cond_0
  830. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  831. invoke-virtual {v0}, Ljava/util/ArrayList;->isEmpty()Z
  832. move-result v0
  833. if-nez v0, :cond_0
  834. const/4 v0, 0x1
  835. goto :goto_0
  836. :cond_0
  837. const/4 v0, 0x0
  838. :goto_0
  839. return v0
  840. .end method
  841. .method public obtainUpdateOp(IIILjava/lang/Object;)Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  842. .locals 1
  843. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mUpdateOpPool:Landroid/support/v4/util/Pools$Pool;
  844. invoke-interface {v0}, Landroid/support/v4/util/Pools$Pool;->acquire()Ljava/lang/Object;
  845. move-result-object v0
  846. check-cast v0, Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  847. if-nez v0, :cond_0
  848. new-instance v0, Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  849. invoke-direct {v0, p1, p2, p3, p4}, Landroid/support/v7/widget/AdapterHelper$UpdateOp;-><init>(IIILjava/lang/Object;)V
  850. goto :goto_0
  851. :cond_0
  852. iput p1, v0, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->cmd:I
  853. iput p2, v0, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->positionStart:I
  854. iput p3, v0, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->itemCount:I
  855. iput-object p4, v0, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->payload:Ljava/lang/Object;
  856. :goto_0
  857. return-object v0
  858. .end method
  859. .method onItemRangeChanged(IILjava/lang/Object;)Z
  860. .locals 4
  861. const/4 v0, 0x0
  862. const/4 v1, 0x1
  863. if-ge p2, v1, :cond_0
  864. return v0
  865. :cond_0
  866. iget-object v2, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  867. const/4 v3, 0x4
  868. invoke-virtual {p0, v3, p1, p2, p3}, Landroid/support/v7/widget/AdapterHelper;->obtainUpdateOp(IIILjava/lang/Object;)Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  869. move-result-object p1
  870. invoke-virtual {v2, p1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
  871. iget p1, p0, Landroid/support/v7/widget/AdapterHelper;->mExistingUpdateTypes:I
  872. or-int/2addr p1, v3
  873. iput p1, p0, Landroid/support/v7/widget/AdapterHelper;->mExistingUpdateTypes:I
  874. iget-object p1, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  875. invoke-virtual {p1}, Ljava/util/ArrayList;->size()I
  876. move-result p1
  877. if-ne p1, v1, :cond_1
  878. const/4 v0, 0x1
  879. :cond_1
  880. return v0
  881. .end method
  882. .method onItemRangeInserted(II)Z
  883. .locals 4
  884. const/4 v0, 0x0
  885. const/4 v1, 0x1
  886. if-ge p2, v1, :cond_0
  887. return v0
  888. :cond_0
  889. iget-object v2, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  890. const/4 v3, 0x0
  891. invoke-virtual {p0, v1, p1, p2, v3}, Landroid/support/v7/widget/AdapterHelper;->obtainUpdateOp(IIILjava/lang/Object;)Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  892. move-result-object p1
  893. invoke-virtual {v2, p1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
  894. iget p1, p0, Landroid/support/v7/widget/AdapterHelper;->mExistingUpdateTypes:I
  895. or-int/2addr p1, v1
  896. iput p1, p0, Landroid/support/v7/widget/AdapterHelper;->mExistingUpdateTypes:I
  897. iget-object p1, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  898. invoke-virtual {p1}, Ljava/util/ArrayList;->size()I
  899. move-result p1
  900. if-ne p1, v1, :cond_1
  901. const/4 v0, 0x1
  902. :cond_1
  903. return v0
  904. .end method
  905. .method onItemRangeMoved(III)Z
  906. .locals 4
  907. const/4 v0, 0x0
  908. if-ne p1, p2, :cond_0
  909. return v0
  910. :cond_0
  911. const/4 v1, 0x1
  912. if-ne p3, v1, :cond_2
  913. iget-object p3, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  914. const/4 v2, 0x0
  915. const/16 v3, 0x8
  916. invoke-virtual {p0, v3, p1, p2, v2}, Landroid/support/v7/widget/AdapterHelper;->obtainUpdateOp(IIILjava/lang/Object;)Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  917. move-result-object p1
  918. invoke-virtual {p3, p1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
  919. iget p1, p0, Landroid/support/v7/widget/AdapterHelper;->mExistingUpdateTypes:I
  920. or-int/2addr p1, v3
  921. iput p1, p0, Landroid/support/v7/widget/AdapterHelper;->mExistingUpdateTypes:I
  922. iget-object p1, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  923. invoke-virtual {p1}, Ljava/util/ArrayList;->size()I
  924. move-result p1
  925. if-ne p1, v1, :cond_1
  926. const/4 v0, 0x1
  927. :cond_1
  928. return v0
  929. :cond_2
  930. new-instance p1, Ljava/lang/IllegalArgumentException;
  931. const-string p2, "Moving more than 1 item is not supported yet"
  932. invoke-direct {p1, p2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
  933. throw p1
  934. .end method
  935. .method onItemRangeRemoved(II)Z
  936. .locals 5
  937. const/4 v0, 0x0
  938. const/4 v1, 0x1
  939. if-ge p2, v1, :cond_0
  940. return v0
  941. :cond_0
  942. iget-object v2, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  943. const/4 v3, 0x0
  944. const/4 v4, 0x2
  945. invoke-virtual {p0, v4, p1, p2, v3}, Landroid/support/v7/widget/AdapterHelper;->obtainUpdateOp(IIILjava/lang/Object;)Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  946. move-result-object p1
  947. invoke-virtual {v2, p1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
  948. iget p1, p0, Landroid/support/v7/widget/AdapterHelper;->mExistingUpdateTypes:I
  949. or-int/2addr p1, v4
  950. iput p1, p0, Landroid/support/v7/widget/AdapterHelper;->mExistingUpdateTypes:I
  951. iget-object p1, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  952. invoke-virtual {p1}, Ljava/util/ArrayList;->size()I
  953. move-result p1
  954. if-ne p1, v1, :cond_1
  955. const/4 v0, 0x1
  956. :cond_1
  957. return v0
  958. .end method
  959. .method preProcess()V
  960. .locals 5
  961. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mOpReorderer:Landroid/support/v7/widget/OpReorderer;
  962. iget-object v1, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  963. invoke-virtual {v0, v1}, Landroid/support/v7/widget/OpReorderer;->reorderOps(Ljava/util/List;)V
  964. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  965. invoke-virtual {v0}, Ljava/util/ArrayList;->size()I
  966. move-result v0
  967. const/4 v1, 0x0
  968. :goto_0
  969. if-ge v1, v0, :cond_5
  970. iget-object v2, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  971. invoke-virtual {v2, v1}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;
  972. move-result-object v2
  973. check-cast v2, Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  974. iget v3, v2, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->cmd:I
  975. const/4 v4, 0x1
  976. if-eq v3, v4, :cond_3
  977. const/4 v4, 0x2
  978. if-eq v3, v4, :cond_2
  979. const/4 v4, 0x4
  980. if-eq v3, v4, :cond_1
  981. const/16 v4, 0x8
  982. if-eq v3, v4, :cond_0
  983. goto :goto_1
  984. :cond_0
  985. invoke-direct {p0, v2}, Landroid/support/v7/widget/AdapterHelper;->applyMove(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  986. goto :goto_1
  987. :cond_1
  988. invoke-direct {p0, v2}, Landroid/support/v7/widget/AdapterHelper;->applyUpdate(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  989. goto :goto_1
  990. :cond_2
  991. invoke-direct {p0, v2}, Landroid/support/v7/widget/AdapterHelper;->applyRemove(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  992. goto :goto_1
  993. :cond_3
  994. invoke-direct {p0, v2}, Landroid/support/v7/widget/AdapterHelper;->applyAdd(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  995. :goto_1
  996. iget-object v2, p0, Landroid/support/v7/widget/AdapterHelper;->mOnItemProcessedCallback:Ljava/lang/Runnable;
  997. if-eqz v2, :cond_4
  998. invoke-interface {v2}, Ljava/lang/Runnable;->run()V
  999. :cond_4
  1000. add-int/lit8 v1, v1, 0x1
  1001. goto :goto_0
  1002. :cond_5
  1003. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  1004. invoke-virtual {v0}, Ljava/util/ArrayList;->clear()V
  1005. return-void
  1006. .end method
  1007. .method public recycleUpdateOp(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  1008. .locals 1
  1009. iget-boolean v0, p0, Landroid/support/v7/widget/AdapterHelper;->mDisableRecycler:Z
  1010. if-nez v0, :cond_0
  1011. const/4 v0, 0x0
  1012. iput-object v0, p1, Landroid/support/v7/widget/AdapterHelper$UpdateOp;->payload:Ljava/lang/Object;
  1013. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mUpdateOpPool:Landroid/support/v4/util/Pools$Pool;
  1014. invoke-interface {v0, p1}, Landroid/support/v4/util/Pools$Pool;->release(Ljava/lang/Object;)Z
  1015. :cond_0
  1016. return-void
  1017. .end method
  1018. .method recycleUpdateOpsAndClearList(Ljava/util/List;)V
  1019. .locals 3
  1020. .annotation system Ldalvik/annotation/Signature;
  1021. value = {
  1022. "(",
  1023. "Ljava/util/List<",
  1024. "Landroid/support/v7/widget/AdapterHelper$UpdateOp;",
  1025. ">;)V"
  1026. }
  1027. .end annotation
  1028. invoke-interface {p1}, Ljava/util/List;->size()I
  1029. move-result v0
  1030. const/4 v1, 0x0
  1031. :goto_0
  1032. if-ge v1, v0, :cond_0
  1033. invoke-interface {p1, v1}, Ljava/util/List;->get(I)Ljava/lang/Object;
  1034. move-result-object v2
  1035. check-cast v2, Landroid/support/v7/widget/AdapterHelper$UpdateOp;
  1036. invoke-virtual {p0, v2}, Landroid/support/v7/widget/AdapterHelper;->recycleUpdateOp(Landroid/support/v7/widget/AdapterHelper$UpdateOp;)V
  1037. add-int/lit8 v1, v1, 0x1
  1038. goto :goto_0
  1039. :cond_0
  1040. invoke-interface {p1}, Ljava/util/List;->clear()V
  1041. return-void
  1042. .end method
  1043. .method reset()V
  1044. .locals 1
  1045. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPendingUpdates:Ljava/util/ArrayList;
  1046. invoke-virtual {p0, v0}, Landroid/support/v7/widget/AdapterHelper;->recycleUpdateOpsAndClearList(Ljava/util/List;)V
  1047. iget-object v0, p0, Landroid/support/v7/widget/AdapterHelper;->mPostponedList:Ljava/util/ArrayList;
  1048. invoke-virtual {p0, v0}, Landroid/support/v7/widget/AdapterHelper;->recycleUpdateOpsAndClearList(Ljava/util/List;)V
  1049. const/4 v0, 0x0
  1050. iput v0, p0, Landroid/support/v7/widget/AdapterHelper;->mExistingUpdateTypes:I
  1051. return-void
  1052. .end method