Skip to content
Snippets Groups Projects
  • Ken Wakasa's avatar
    b0440472
    mExpectingUpdateSelection was out of sync when nothing to delete. · b0440472
    Ken Wakasa authored
    cherripick of I9c6a948331726a821bd3ccec9c1d02dec2c4703a
    (forward cherrypicking this because the automerger is stuck now.)
    
    This bug was leading to corrupted rendering of surrogate pairs in the following
    scenario.
    
    1. Type some emojis
    2. Move the cursor at the beginning of the text field
    3. Hit backspace even though there's nothing to delete
    4. Move the cursor after some emoji
    5. Hit backspace
    
    The root cause of this issue was the out-of-sync mExpectingUpdateSelection if
    handleBackspace() gets called when the cursor reaches at the beginning of the
    TextView. In such case, mExpectingUpdateSelection shouldn't be set true because
    there's nothing to delete, so there will be no onUpdateSelection() calls associated
    with it. Due to this bug, the cache in RichInputConnection could get stale at step 4
    described above. Then the following handleBackspace() that should delete a surrogate
    pair was not working correctly because of the stale cache.
    
    bug: 11181913
    Change-Id: I1cbf444d8d105416e7de75c16d80b3797f470495
    b0440472
    History
    mExpectingUpdateSelection was out of sync when nothing to delete.
    Ken Wakasa authored
    cherripick of I9c6a948331726a821bd3ccec9c1d02dec2c4703a
    (forward cherrypicking this because the automerger is stuck now.)
    
    This bug was leading to corrupted rendering of surrogate pairs in the following
    scenario.
    
    1. Type some emojis
    2. Move the cursor at the beginning of the text field
    3. Hit backspace even though there's nothing to delete
    4. Move the cursor after some emoji
    5. Hit backspace
    
    The root cause of this issue was the out-of-sync mExpectingUpdateSelection if
    handleBackspace() gets called when the cursor reaches at the beginning of the
    TextView. In such case, mExpectingUpdateSelection shouldn't be set true because
    there's nothing to delete, so there will be no onUpdateSelection() calls associated
    with it. Due to this bug, the cache in RichInputConnection could get stale at step 4
    described above. Then the following handleBackspace() that should delete a surrogate
    pair was not working correctly because of the stale cache.
    
    bug: 11181913
    Change-Id: I1cbf444d8d105416e7de75c16d80b3797f470495