diff options
6 files changed, 49 insertions, 22 deletions
diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java index b8fd57159..37b241bcd 100644 --- a/java/com/android/dialer/app/DialtactsActivity.java +++ b/java/com/android/dialer/app/DialtactsActivity.java @@ -1454,6 +1454,12 @@ public class DialtactsActivity extends TransactionSafeActivity } @Override + public boolean shouldShowDialpadChooser() { + // Show the dialpad chooser if we're in a call + return true; + } + + @Override public void onSearchListTouch() { if (isDialpadShown) { PerformanceReport.recordClick(UiAction.Type.CLOSE_DIALPAD); diff --git a/java/com/android/dialer/app/calllog/CallLogFragment.java b/java/com/android/dialer/app/calllog/CallLogFragment.java index 11c249944..7e49cc965 100644 --- a/java/com/android/dialer/app/calllog/CallLogFragment.java +++ b/java/com/android/dialer/app/calllog/CallLogFragment.java @@ -222,18 +222,6 @@ public class CallLogFragment extends Fragment final Activity activity = getActivity(); final ContentResolver resolver = activity.getContentResolver(); callLogQueryHandler = new CallLogQueryHandler(activity, resolver, this, logLimit); - - if (PermissionsUtil.hasCallLogReadPermissions(getContext())) { - resolver.registerContentObserver(CallLog.CONTENT_URI, true, callLogObserver); - } else { - LogUtil.w("CallLogFragment.onCreate", "call log permission not available"); - } - if (PermissionsUtil.hasContactsReadPermissions(getContext())) { - resolver.registerContentObserver( - ContactsContract.Contacts.CONTENT_URI, true, contactsObserver); - } else { - LogUtil.w("CallLogFragment.onCreate", "contacts permission not available."); - } setHasOptionsMenu(true); } @@ -412,6 +400,19 @@ public class CallLogFragment extends Fragment updateEmptyMessage(callTypeFilter); } + ContentResolver resolver = getActivity().getContentResolver(); + if (PermissionsUtil.hasCallLogReadPermissions(getContext())) { + resolver.registerContentObserver(CallLog.CONTENT_URI, true, callLogObserver); + } else { + LogUtil.w("CallLogFragment.onCreate", "call log permission not available"); + } + if (PermissionsUtil.hasContactsReadPermissions(getContext())) { + resolver.registerContentObserver( + ContactsContract.Contacts.CONTENT_URI, true, contactsObserver); + } else { + LogUtil.w("CallLogFragment.onCreate", "contacts permission not available."); + } + this.hasReadCallLogPermission = hasReadCallLogPermission; /* @@ -432,6 +433,8 @@ public class CallLogFragment extends Fragment @Override public void onPause() { LogUtil.enterBlock("CallLogFragment.onPause"); + getActivity().getContentResolver().unregisterContentObserver(callLogObserver); + getActivity().getContentResolver().unregisterContentObserver(contactsObserver); if (getUserVisibleHint()) { onNotVisible(); } @@ -465,9 +468,6 @@ public class CallLogFragment extends Fragment if (adapter != null) { adapter.changeCursor(null); } - - getActivity().getContentResolver().unregisterContentObserver(callLogObserver); - getActivity().getContentResolver().unregisterContentObserver(contactsObserver); super.onDestroy(); } diff --git a/java/com/android/dialer/dialpadview/DialpadFragment.java b/java/com/android/dialer/dialpadview/DialpadFragment.java index 680159057..f09333280 100644 --- a/java/com/android/dialer/dialpadview/DialpadFragment.java +++ b/java/com/android/dialer/dialpadview/DialpadFragment.java @@ -1312,7 +1312,9 @@ public class DialpadFragment extends Fragment * or ringing or dialing, or on hold). */ private boolean isPhoneInUse() { - return getContext() != null && TelecomUtil.isInManagedCall(getContext()); + return getContext() != null + && TelecomUtil.isInManagedCall(getContext()) + && FragmentUtils.getParentUnsafe(this, HostInterface.class).shouldShowDialpadChooser(); } /** @return true if the phone is a CDMA phone type */ @@ -1584,6 +1586,9 @@ public class DialpadFragment extends Fragment * unless there happens to be content showing. */ boolean onDialpadSpacerTouchWithEmptyQuery(); + + /** Returns true if this fragment's parent want the dialpad to show the dialpad chooser. */ + boolean shouldShowDialpadChooser(); } /** diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java index 2999c6b0b..ee0dad5b8 100644 --- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java +++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java @@ -651,6 +651,12 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen // No-op, just let the clicks fall through to the search list return false; } + + @Override + public boolean shouldShowDialpadChooser() { + // Never show the dialpad chooser. Ever. + return false; + } } /** @see CallLogAdapter.OnActionModeStateChangedListener */ diff --git a/java/com/android/dialer/main/impl/toolbar/MainToolbar.java b/java/com/android/dialer/main/impl/toolbar/MainToolbar.java index fc4bd0312..2f36717c9 100644 --- a/java/com/android/dialer/main/impl/toolbar/MainToolbar.java +++ b/java/com/android/dialer/main/impl/toolbar/MainToolbar.java @@ -19,6 +19,7 @@ package com.android.dialer.main.impl.toolbar; import android.animation.ValueAnimator; import android.animation.ValueAnimator.AnimatorUpdateListener; import android.content.Context; +import android.support.annotation.NonNull; import android.support.annotation.StringRes; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; @@ -66,9 +67,9 @@ public final class MainToolbar extends Toolbar implements PopupMenu.OnMenuItemCl return listener.onMenuItemClicked(menuItem); } - public void setSearchBarListener(SearchBarListener listener) { - this.listener = listener; - ((SearchBarView) findViewById(R.id.search_view_container)).setSearchBarListener(listener); + public void setSearchBarListener(@NonNull SearchBarListener listener) { + this.listener = Assert.isNotNull(listener); + searchBar.setSearchBarListener(listener); } /** Slides the toolbar up and off the screen. */ diff --git a/java/com/android/dialer/main/impl/toolbar/SearchBarView.java b/java/com/android/dialer/main/impl/toolbar/SearchBarView.java index 78cabf733..299985057 100644 --- a/java/com/android/dialer/main/impl/toolbar/SearchBarView.java +++ b/java/com/android/dialer/main/impl/toolbar/SearchBarView.java @@ -32,6 +32,7 @@ import android.widget.EditText; import android.widget.FrameLayout; import android.widget.TextView; import com.android.dialer.animation.AnimUtils; +import com.android.dialer.common.Assert; import com.android.dialer.common.UiUtil; import com.android.dialer.util.DialerUtils; import com.google.common.base.Optional; @@ -188,8 +189,8 @@ final class SearchBarView extends FrameLayout { requestLayout(); } - /* package-private */ void setSearchBarListener(SearchBarListener listener) { - this.listener = listener; + /* package-private */ void setSearchBarListener(@NonNull SearchBarListener listener) { + this.listener = Assert.isNotNull(listener); } public String getQuery() { @@ -236,7 +237,15 @@ final class SearchBarView extends FrameLayout { return; } - listener.onSearchQueryUpdated(s.toString()); + // afterTextChanged is called each time the device is rotated (or the activity is recreated). + // That means that this method could potentially be called before the listener is set and + // we should check if it's null. In the case that it is null, assert that the query is empty + // because the listener must be notified of non-empty queries. + if (listener != null) { + listener.onSearchQueryUpdated(s.toString()); + } else { + Assert.checkArgument(TextUtils.isEmpty(s.toString())); + } } } } |