Expand tap target of contact selection keyboard toggles.

Fixes #3750
// FREEBIE
This commit is contained in:
Moxie Marlinspike 2015-07-22 16:25:02 -07:00
parent c27459a760
commit 39ac2b5042

View File

@ -17,15 +17,16 @@
package org.thoughtcrime.securesms; package org.thoughtcrime.securesms;
import android.content.Context; import android.content.Context;
import android.graphics.Rect;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.widget.SwipeRefreshLayout; import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.text.Editable; import android.text.Editable;
import android.text.InputType; import android.text.InputType;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.Log; import android.util.Log;
import android.view.TouchDelegate;
import android.view.View; import android.view.View;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ImageView; import android.widget.ImageView;
@ -74,7 +75,7 @@ public abstract class ContactSelectionActivity extends PassphraseRequiredActionB
} }
@Override @Override
protected void onCreate(Bundle icicle, @NonNull MasterSecret masterSecret) { protected void onCreate(Bundle icicle, MasterSecret masterSecret) {
setContentView(R.layout.contact_selection_activity); setContentView(R.layout.contact_selection_activity);
initializeToolbar(); initializeToolbar();
@ -114,7 +115,7 @@ public abstract class ContactSelectionActivity extends PassphraseRequiredActionB
public void onClick(View v) { public void onClick(View v) {
searchText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PERSON_NAME); searchText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PERSON_NAME);
ServiceUtil.getInputMethodManager(ContactSelectionActivity.this).showSoftInput(searchText, 0); ServiceUtil.getInputMethodManager(ContactSelectionActivity.this).showSoftInput(searchText, 0);
toggle.display(dialpadToggle); displayTogglingView(dialpadToggle);
} }
}); });
@ -123,7 +124,7 @@ public abstract class ContactSelectionActivity extends PassphraseRequiredActionB
public void onClick(View v) { public void onClick(View v) {
searchText.setInputType(InputType.TYPE_CLASS_PHONE); searchText.setInputType(InputType.TYPE_CLASS_PHONE);
ServiceUtil.getInputMethodManager(ContactSelectionActivity.this).showSoftInput(searchText, 0); ServiceUtil.getInputMethodManager(ContactSelectionActivity.this).showSoftInput(searchText, 0);
toggle.display(keyboardToggle); displayTogglingView(keyboardToggle);
} }
}); });
@ -132,10 +133,12 @@ public abstract class ContactSelectionActivity extends PassphraseRequiredActionB
public void onClick(View v) { public void onClick(View v) {
searchText.setText(""); searchText.setText("");
if (SearchUtil.isTextInput(searchText)) toggle.display(dialpadToggle); if (SearchUtil.isTextInput(searchText)) displayTogglingView(dialpadToggle);
else toggle.display(keyboardToggle); else displayTogglingView(keyboardToggle);
} }
}); });
expandTapArea(toolbar, dialpadToggle, 500);
} }
private void initializeSearch() { private void initializeSearch() {
@ -152,9 +155,9 @@ public abstract class ContactSelectionActivity extends PassphraseRequiredActionB
@Override @Override
public void afterTextChanged(Editable s) { public void afterTextChanged(Editable s) {
if (!SearchUtil.isEmpty(searchText)) toggle.display(clearToggle); if (!SearchUtil.isEmpty(searchText)) displayTogglingView(clearToggle);
else if (SearchUtil.isTextInput(searchText)) toggle.display(dialpadToggle); else if (SearchUtil.isTextInput(searchText)) displayTogglingView(dialpadToggle);
else if (SearchUtil.isPhoneInput(searchText)) toggle.display(keyboardToggle); else if (SearchUtil.isPhoneInput(searchText)) displayTogglingView(keyboardToggle);
contactsFragment.setQueryFilter(searchText.getText().toString()); contactsFragment.setQueryFilter(searchText.getText().toString());
} }
@ -169,6 +172,28 @@ public abstract class ContactSelectionActivity extends PassphraseRequiredActionB
@Override @Override
public void onContactSelected(String number) {} public void onContactSelected(String number) {}
private void displayTogglingView(View view) {
toggle.display(view);
expandTapArea(toolbar, view, 500);
}
private void expandTapArea(final View container, final View child, final int padding) {
container.post(new Runnable() {
@Override
public void run() {
Rect rect = new Rect();
child.getHitRect(rect);
rect.top -= padding;
rect.left -= padding;
rect.right += padding;
rect.bottom += padding;
container.setTouchDelegate(new TouchDelegate(rect, child));
}
});
}
private static class SearchUtil { private static class SearchUtil {
public static boolean isTextInput(EditText editText) { public static boolean isTextInput(EditText editText) {