|
1 | 1 | /* |
2 | 2 | * Created by wangzhuohou on 2015/08/01. |
3 | | - * Copyright 2015-2020 Sensors Data Inc. |
| 3 | + * Copyright 2015-2021 Sensors Data Inc. |
4 | 4 | * |
5 | 5 | * Licensed under the Apache License, Version 2.0 (the "License"); |
6 | 6 | * you may not use this file except in compliance with the License. |
@@ -310,6 +310,60 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor { |
310 | 310 | methodVisitor.visitVarInsn(ALOAD, 1) |
311 | 311 | methodVisitor.visitVarInsn(ASTORE, firstLocalId) |
312 | 312 | localIds.add(firstLocalId) |
| 313 | + } else if (nameDesc == "onGroupClick(Landroid/widget/ExpandableListView;Landroid/view/View;IJ)Z") { |
| 314 | + localIds = new ArrayList<>() |
| 315 | + int firstLocalId = newLocal(Type.getObjectType("android/widget/ExpandableListView")) |
| 316 | + methodVisitor.visitVarInsn(ALOAD, 1) |
| 317 | + methodVisitor.visitVarInsn(ASTORE, firstLocalId) |
| 318 | + localIds.add(firstLocalId) |
| 319 | + |
| 320 | + int secondLocalId = newLocal(Type.getObjectType("android/view/View")) |
| 321 | + methodVisitor.visitVarInsn(ALOAD, 2) |
| 322 | + methodVisitor.visitVarInsn(ASTORE, secondLocalId) |
| 323 | + localIds.add(secondLocalId) |
| 324 | + |
| 325 | + int thirdLocalId = newLocal(Type.INT_TYPE) |
| 326 | + methodVisitor.visitVarInsn(ILOAD, 3) |
| 327 | + methodVisitor.visitVarInsn(ISTORE, thirdLocalId) |
| 328 | + localIds.add(thirdLocalId) |
| 329 | + } else if (nameDesc == "onChildClick(Landroid/widget/ExpandableListView;Landroid/view/View;IIJ)Z") { |
| 330 | + localIds = new ArrayList<>() |
| 331 | + int firstLocalId = newLocal(Type.getObjectType("android/widget/ExpandableListView")) |
| 332 | + methodVisitor.visitVarInsn(ALOAD, 1) |
| 333 | + methodVisitor.visitVarInsn(ASTORE, firstLocalId) |
| 334 | + localIds.add(firstLocalId) |
| 335 | + |
| 336 | + int secondLocalId = newLocal(Type.getObjectType("android/view/View")) |
| 337 | + methodVisitor.visitVarInsn(ALOAD, 2) |
| 338 | + methodVisitor.visitVarInsn(ASTORE, secondLocalId) |
| 339 | + localIds.add(secondLocalId) |
| 340 | + |
| 341 | + int thirdLocalId = newLocal(Type.INT_TYPE) |
| 342 | + methodVisitor.visitVarInsn(ILOAD, 3) |
| 343 | + methodVisitor.visitVarInsn(ISTORE, thirdLocalId) |
| 344 | + localIds.add(thirdLocalId) |
| 345 | + |
| 346 | + int fourthLocalId = newLocal(Type.INT_TYPE) |
| 347 | + methodVisitor.visitVarInsn(ILOAD, 4) |
| 348 | + methodVisitor.visitVarInsn(ISTORE, fourthLocalId) |
| 349 | + localIds.add(fourthLocalId) |
| 350 | + } else if (nameDesc == "onItemSelected(Landroid/widget/AdapterView;Landroid/view/View;IJ)V" |
| 351 | + || nameDesc == "onListItemClick(Landroid/widget/ListView;Landroid/view/View;IJ)V") { |
| 352 | + localIds = new ArrayList<>() |
| 353 | + int firstLocalId = newLocal(Type.getObjectType("java/lang/Object")) |
| 354 | + methodVisitor.visitVarInsn(ALOAD, 1) |
| 355 | + methodVisitor.visitVarInsn(ASTORE, firstLocalId) |
| 356 | + localIds.add(firstLocalId) |
| 357 | + |
| 358 | + int secondLocalId = newLocal(Type.getObjectType("android/view/View")) |
| 359 | + methodVisitor.visitVarInsn(ALOAD, 2) |
| 360 | + methodVisitor.visitVarInsn(ASTORE, secondLocalId) |
| 361 | + localIds.add(secondLocalId) |
| 362 | + |
| 363 | + int thirdLocalId = newLocal(Type.INT_TYPE) |
| 364 | + methodVisitor.visitVarInsn(ILOAD, 3) |
| 365 | + methodVisitor.visitVarInsn(ISTORE, thirdLocalId) |
| 366 | + localIds.add(thirdLocalId) |
313 | 367 | } |
314 | 368 |
|
315 | 369 | // Lambda 参数优化部分,对现有参数进行复制 |
@@ -487,9 +541,9 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor { |
487 | 541 | } |
488 | 542 |
|
489 | 543 | if (nameDesc == 'onItemSelected(Landroid/widget/AdapterView;Landroid/view/View;IJ)V' || nameDesc == "onListItemClick(Landroid/widget/ListView;Landroid/view/View;IJ)V") { |
490 | | - methodVisitor.visitVarInsn(ALOAD, 1) |
491 | | - methodVisitor.visitVarInsn(ALOAD, 2) |
492 | | - methodVisitor.visitVarInsn(ILOAD, 3) |
| 544 | + methodVisitor.visitVarInsn(ALOAD, localIds.get(0)) |
| 545 | + methodVisitor.visitVarInsn(ALOAD, localIds.get(1)) |
| 546 | + methodVisitor.visitVarInsn(ILOAD, localIds.get(2)) |
493 | 547 | methodVisitor.visitMethodInsn(INVOKESTATIC, SensorsAnalyticsHookConfig.SENSORS_ANALYTICS_API, "trackListView", "(Landroid/widget/AdapterView;Landroid/view/View;I)V", false) |
494 | 548 | isHasTracked = true |
495 | 549 | return |
@@ -549,6 +603,31 @@ class SensorsAnalyticsClassVisitor extends ClassVisitor { |
549 | 603 | isHasTracked = true |
550 | 604 | return |
551 | 605 | } |
| 606 | + } else if (mInterfaces.contains('android/widget/ExpandableListView$OnGroupClickListener') |
| 607 | + && nameDesc == 'onGroupClick(Landroid/widget/ExpandableListView;Landroid/view/View;IJ)Z') { |
| 608 | + SensorsAnalyticsMethodCell sensorsAnalyticsMethodCell = SensorsAnalyticsHookConfig.INTERFACE_METHODS |
| 609 | + .get('android/widget/ExpandableListView$OnGroupClickListeneronGroupClick(Landroid/widget/ExpandableListView;Landroid/view/View;IJ)Z') |
| 610 | + if (sensorsAnalyticsMethodCell != null) { |
| 611 | + methodVisitor.visitVarInsn(ALOAD, localIds.get(0)) |
| 612 | + methodVisitor.visitVarInsn(ALOAD, localIds.get(1)) |
| 613 | + methodVisitor.visitVarInsn(ILOAD, localIds.get(2)) |
| 614 | + methodVisitor.visitMethodInsn(INVOKESTATIC, SensorsAnalyticsHookConfig.SENSORS_ANALYTICS_API, sensorsAnalyticsMethodCell.agentName, sensorsAnalyticsMethodCell.agentDesc, false) |
| 615 | + isHasTracked = true |
| 616 | + return |
| 617 | + } |
| 618 | + } else if (mInterfaces.contains('android/widget/ExpandableListView$OnChildClickListener') |
| 619 | + && nameDesc == 'onChildClick(Landroid/widget/ExpandableListView;Landroid/view/View;IIJ)Z') { |
| 620 | + SensorsAnalyticsMethodCell sensorsAnalyticsMethodCell = SensorsAnalyticsHookConfig.INTERFACE_METHODS |
| 621 | + .get('android/widget/ExpandableListView$OnChildClickListeneronChildClick(Landroid/widget/ExpandableListView;Landroid/view/View;IIJ)Z') |
| 622 | + if (sensorsAnalyticsMethodCell != null) { |
| 623 | + methodVisitor.visitVarInsn(ALOAD, localIds.get(0)) |
| 624 | + methodVisitor.visitVarInsn(ALOAD, localIds.get(1)) |
| 625 | + methodVisitor.visitVarInsn(ILOAD, localIds.get(2)) |
| 626 | + methodVisitor.visitVarInsn(ILOAD, localIds.get(3)) |
| 627 | + methodVisitor.visitMethodInsn(INVOKESTATIC, SensorsAnalyticsHookConfig.SENSORS_ANALYTICS_API, sensorsAnalyticsMethodCell.agentName, sensorsAnalyticsMethodCell.agentDesc, false) |
| 628 | + isHasTracked = true |
| 629 | + return |
| 630 | + } |
552 | 631 | } else if (nameDesc == 'onMenuItemClick(Landroid/view/MenuItem;)Z') { |
553 | 632 | for (interfaceName in mInterfaces) { |
554 | 633 | SensorsAnalyticsMethodCell sensorsAnalyticsMethodCell = SensorsAnalyticsHookConfig.INTERFACE_METHODS.get(interfaceName + nameDesc) |
|
0 commit comments