1ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian/*
2ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Copyright (C) 2015 The Android Open Source Project
3ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian *
4ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Licensed under the Apache License, Version 2.0 (the "License");
5ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * you may not use this file except in compliance with the License.
6ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * You may obtain a copy of the License at
7ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian *
8ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian *      http://www.apache.org/licenses/LICENSE-2.0
9ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian *
10ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Unless required by applicable law or agreed to in writing, software
11ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * distributed under the License is distributed on an "AS IS" BASIS,
12ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * See the License for the specific language governing permissions and
14ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * limitations under the License.
15ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */
16ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianpackage com.android.dialer.app.list;
17ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
18ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.app.Activity;
19ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.os.Bundle;
20ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.support.v7.app.ActionBar;
21ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.support.v7.app.AppCompatActivity;
22ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.telephony.PhoneNumberUtils;
23ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.text.Editable;
24ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.text.TextUtils;
25ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.text.TextWatcher;
26ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.util.TypedValue;
27ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.view.View;
28ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.widget.AdapterView;
29ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.widget.EditText;
30ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.widget.Toast;
31ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.contacts.common.list.ContactEntryListAdapter;
32ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.contacts.common.util.ContactDisplayUtils;
33ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.app.R;
34ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.app.widget.SearchEditTextLayout;
35ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.blocking.BlockNumberDialogFragment;
36ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
37ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.blocking.FilteredNumberAsyncQueryHandler.OnCheckBlockedListener;
388369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanianimport com.android.dialer.common.LogUtil;
3910b34a5ebf12e97ecba0caf3c8e30b476b038a96Eric Erfanianimport com.android.dialer.location.GeoUtil;
408369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanianimport com.android.dialer.logging.InteractionEvent;
41ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.logging.Logger;
42ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
43ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianpublic class BlockedListSearchFragment extends RegularSearchFragment
44ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    implements BlockNumberDialogFragment.Callback {
45ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
46ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  private final TextWatcher mPhoneSearchQueryTextListener =
47ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      new TextWatcher() {
48ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        @Override
49ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
50ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
51ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        @Override
52ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        public void onTextChanged(CharSequence s, int start, int before, int count) {
53ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian          setQueryString(s.toString());
54ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        }
55ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
56ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        @Override
57ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        public void afterTextChanged(Editable s) {}
58ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      };
59ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  private final SearchEditTextLayout.Callback mSearchLayoutCallback =
60ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      new SearchEditTextLayout.Callback() {
61ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        @Override
62ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        public void onBackButtonClicked() {
63ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian          getActivity().onBackPressed();
64ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        }
65ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
66ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        @Override
67ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        public void onSearchViewClicked() {}
68ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      };
69ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  private FilteredNumberAsyncQueryHandler mFilteredNumberAsyncQueryHandler;
70ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  private EditText mSearchView;
71ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
72ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
73ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void onCreate(Bundle savedInstanceState) {
74ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    super.onCreate(savedInstanceState);
75ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
76ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    setShowEmptyListForNullQuery(true);
77ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    /*
78ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian     * Pass in the empty string here so ContactEntryListFragment#setQueryString interprets it as
79ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian     * an empty search query, rather than as an uninitalized value. In the latter case, the
80ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian     * adapter returned by #createListAdapter is used, which populates the view with contacts.
81ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian     * Passing in the empty string forces ContactEntryListFragment to interpret it as an empty
82ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian     * query, which results in showing an empty view
83ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian     */
84ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    setQueryString(getQueryString() == null ? "" : getQueryString());
85ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mFilteredNumberAsyncQueryHandler = new FilteredNumberAsyncQueryHandler(getContext());
86ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
87ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
88ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
89ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void onResume() {
90ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    super.onResume();
91ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
92ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
93ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    actionBar.setCustomView(R.layout.search_edittext);
94ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    actionBar.setDisplayShowCustomEnabled(true);
95ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    actionBar.setDisplayHomeAsUpEnabled(false);
96ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    actionBar.setDisplayShowHomeEnabled(false);
97ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
98ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    final SearchEditTextLayout searchEditTextLayout =
99ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        (SearchEditTextLayout) actionBar.getCustomView().findViewById(R.id.search_view_container);
100ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    searchEditTextLayout.expand(false, true);
101ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    searchEditTextLayout.setCallback(mSearchLayoutCallback);
102ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    searchEditTextLayout.setBackgroundDrawable(null);
103ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
104ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mSearchView = (EditText) searchEditTextLayout.findViewById(R.id.search_view);
105ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mSearchView.addTextChangedListener(mPhoneSearchQueryTextListener);
106ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mSearchView.setHint(R.string.block_number_search_hint);
107ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
108ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    searchEditTextLayout
109ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        .findViewById(R.id.search_box_expanded)
110ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        .setBackgroundColor(getContext().getResources().getColor(android.R.color.white));
111ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
112ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    if (!TextUtils.isEmpty(getQueryString())) {
113ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      mSearchView.setText(getQueryString());
114ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
115ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
116ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    // TODO: Don't set custom text size; use default search text size.
117ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mSearchView.setTextSize(
118ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        TypedValue.COMPLEX_UNIT_PX,
119ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        getResources().getDimension(R.dimen.blocked_number_search_text_size));
120ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
121ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
122ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
123ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  protected ContactEntryListAdapter createListAdapter() {
124ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    BlockedListSearchAdapter adapter = new BlockedListSearchAdapter(getActivity());
125ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    adapter.setDisplayPhotos(true);
126ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    // Don't show SIP addresses.
127ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    adapter.setUseCallableUri(false);
128ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    // Keep in sync with the queryString set in #onCreate
129ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    adapter.setQueryString(getQueryString() == null ? "" : getQueryString());
130ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    return adapter;
131ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
132ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
133ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
134ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
135ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    super.onItemClick(parent, view, position, id);
136ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    final int adapterPosition = position - getListView().getHeaderViewsCount();
137ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    final BlockedListSearchAdapter adapter = (BlockedListSearchAdapter) getAdapter();
138ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    final int shortcutType = adapter.getShortcutTypeFromPosition(adapterPosition);
139ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    final Integer blockId = (Integer) view.getTag(R.id.block_id);
140ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    final String number;
141ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    switch (shortcutType) {
142ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      case DialerPhoneNumberListAdapter.SHORTCUT_INVALID:
143ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        // Handles click on a search result, either contact or nearby places result.
144ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        number = adapter.getPhoneNumber(adapterPosition);
145ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        blockContactNumber(number, blockId);
146ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        break;
147ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      case DialerPhoneNumberListAdapter.SHORTCUT_BLOCK_NUMBER:
148ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        // Handles click on 'Block number' shortcut to add the user query as a number.
149ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        number = adapter.getQueryString();
150ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        blockNumber(number);
151ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        break;
152ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      default:
1538369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian        LogUtil.w(
1548369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian            "BlockedListSearchFragment.onItemClick",
1558369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian            "ignoring unsupported shortcut type: " + shortcutType);
156ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        break;
157ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
158ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
159ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
160ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
161ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  protected void onItemClick(int position, long id) {
162ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    // Prevent SearchFragment.onItemClicked from being called.
163ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
164ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
165ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  private void blockNumber(final String number) {
166ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    final String countryIso = GeoUtil.getCurrentCountryIso(getContext());
167ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    final OnCheckBlockedListener onCheckListener =
168ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        new OnCheckBlockedListener() {
169ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian          @Override
170ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian          public void onCheckComplete(Integer id) {
171ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian            if (id == null) {
172ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian              BlockNumberDialogFragment.show(
173ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                  id,
174ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                  number,
175ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                  countryIso,
176ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                  PhoneNumberUtils.formatNumber(number, countryIso),
177ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                  R.id.blocked_numbers_activity_container,
178ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                  getFragmentManager(),
179ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                  BlockedListSearchFragment.this);
180ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian            } else if (id == FilteredNumberAsyncQueryHandler.INVALID_ID) {
181ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian              Toast.makeText(
182ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                      getContext(),
183ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                      ContactDisplayUtils.getTtsSpannedPhoneNumber(
184ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                          getResources(), R.string.invalidNumber, number),
185ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                      Toast.LENGTH_SHORT)
186ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                  .show();
187ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian            } else {
188ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian              Toast.makeText(
189ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                      getContext(),
190ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                      ContactDisplayUtils.getTtsSpannedPhoneNumber(
191ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                          getResources(), R.string.alreadyBlocked, number),
192ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                      Toast.LENGTH_SHORT)
193ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                  .show();
194ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian            }
195ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian          }
196ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        };
197ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mFilteredNumberAsyncQueryHandler.isBlockedNumber(onCheckListener, number, countryIso);
198ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
199ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
200ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
201ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void onFilterNumberSuccess() {
202ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    Logger.get(getContext()).logInteraction(InteractionEvent.Type.BLOCK_NUMBER_MANAGEMENT_SCREEN);
203ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    goBack();
204ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
205ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
206ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
207ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void onUnfilterNumberSuccess() {
2088369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian    LogUtil.e(
2098369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian        "BlockedListSearchFragment.onUnfilterNumberSuccess",
2108369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian        "unblocked a number from the BlockedListSearchFragment");
211ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    goBack();
212ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
213ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
214ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  private void goBack() {
215ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    Activity activity = getActivity();
216ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    if (activity == null) {
217ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      return;
218ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
219ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    activity.onBackPressed();
220ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
221ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
222ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
223ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void onChangeFilteredNumberUndo() {
224ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    getAdapter().notifyDataSetChanged();
225ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
226ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
227ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  private void blockContactNumber(final String number, final Integer blockId) {
228ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    if (blockId != null) {
229ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      Toast.makeText(
230ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian              getContext(),
231ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian              ContactDisplayUtils.getTtsSpannedPhoneNumber(
232ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian                  getResources(), R.string.alreadyBlocked, number),
233ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian              Toast.LENGTH_SHORT)
234ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian          .show();
235ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      return;
236ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
237ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
238ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    BlockNumberDialogFragment.show(
239ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        blockId,
240ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        number,
241ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        GeoUtil.getCurrentCountryIso(getContext()),
242ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        number,
243ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        R.id.blocked_numbers_activity_container,
244ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        getFragmentManager(),
245ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        this);
246ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
247ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian}
248