summaryrefslogtreecommitdiff
path: root/src/com/android/dialer/list/ContentChangedFilter.java
blob: e552aa3f03e3723787ff3ccb1bd4f24fdafa4beb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.android.dialer.list;

import android.view.View;
import android.view.View.AccessibilityDelegate;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;

/**
 * AccessibilityDelegate that will filter out TYPE_WINDOW_CONTENT_CHANGED
 * Used to suppress "Showing items x of y" from firing of ListView whenever it's content changes.
 * AccessibilityEvent can only be rejected at a view's parent once it is generated,
 * use addToParent() to add this delegate to the parent.
 */
public class ContentChangedFilter extends AccessibilityDelegate {
  //the view we don't want TYPE_WINDOW_CONTENT_CHANGED to fire.
  private View mView;

  /**
   * Add this delegate to the parent of @param view to filter out TYPE_WINDOW_CONTENT_CHANGED
   */
  public static void addToParent(View view){
    View parent = (View) view.getParent();
    parent.setAccessibilityDelegate(new ContentChangedFilter(view));
  }

  private ContentChangedFilter(View view){
    super();
    mView = view;
  }
  @Override
  public boolean onRequestSendAccessibilityEvent (ViewGroup host, View child, AccessibilityEvent event){
    if(child == mView){
      if(event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED){
        return false;
      }
    }
    return super.onRequestSendAccessibilityEvent(host,child,event);
  }

}