1e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong/* 2e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong * Copyright (C) 2015 The Android Open Source Project 3e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong * 4e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong * Licensed under the Apache License, Version 2.0 (the "License"); 5e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong * you may not use this file except in compliance with the License. 6e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong * You may obtain a copy of the License at 7e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong * 8e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong * http://www.apache.org/licenses/LICENSE-2.0 9e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong * 10e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong * Unless required by applicable law or agreed to in writing, software 11e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong * distributed under the License is distributed on an "AS IS" BASIS, 12e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong * See the License for the specific language governing permissions and 14e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong * limitations under the License. 15e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong */ 16e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rongpackage com.android.dialer.filterednumber; 17e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong 189af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Leeimport android.support.v4.app.Fragment; 199af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Leeimport android.support.v4.app.FragmentManager; 20e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rongimport android.content.Intent; 21e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rongimport android.net.Uri; 22e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rongimport android.os.Bundle; 23e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rongimport android.support.v7.app.AppCompatActivity; 24e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rongimport android.util.Log; 253663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Leeimport android.view.MenuItem; 26e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rongimport android.widget.FrameLayout; 27e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rongimport android.widget.FrameLayout.LayoutParams; 28e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rongimport android.widget.Toast; 29e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong 30e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rongimport com.android.contacts.common.GeoUtil; 31e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rongimport com.android.contacts.common.dialog.IndeterminateProgressDialog; 32e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rongimport com.android.contacts.common.list.OnPhoneNumberPickerActionListener; 33e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rongimport com.android.dialer.R; 34e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rongimport com.android.dialer.database.FilteredNumberAsyncQueryHandler; 35113346fccb1eefd1e97deaaaee7bb3f3763f2540Anne Rongimport com.android.dialer.list.BlockedListSearchAdapter; 36e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rongimport com.android.dialer.list.OnListFragmentScrolledListener; 37e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rongimport com.android.dialer.list.BlockedListSearchFragment; 38e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rongimport com.android.dialer.list.SearchFragment; 39f96bb18b904dada96002cb72d862097ae344db57Yorke Leeimport com.android.dialer.logging.Logger; 40f96bb18b904dada96002cb72d862097ae344db57Yorke Leeimport com.android.dialer.logging.ScreenEvent; 41e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong 4291cd89c9ca486624850cdb0aaec86882a30c18a7Andrew Leepublic class BlockedNumbersSettingsActivity extends AppCompatActivity 43113346fccb1eefd1e97deaaaee7bb3f3763f2540Anne Rong implements SearchFragment.HostInterface { 443663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee 453663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee private static final String TAG_BLOCKED_MANAGEMENT_FRAGMENT = "blocked_management"; 46e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong private static final String TAG_BLOCKED_SEARCH_FRAGMENT = "blocked_search"; 479af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee private static final String TAG_VIEW_NUMBERS_TO_IMPORT_FRAGMENT = "view_numbers_to_import"; 483663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee 49e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong @Override 50e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong protected void onCreate(Bundle savedInstanceState) { 51e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong super.onCreate(savedInstanceState); 523663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee setContentView(R.layout.blocked_numbers_activity); 533663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee 543151f53974425c6b07c12e94eb4e6f4ab72818bcAndrew Lee // If savedInstanceState != null, the Activity will automatically restore the last fragment. 553151f53974425c6b07c12e94eb4e6f4ab72818bcAndrew Lee if (savedInstanceState == null) { 563151f53974425c6b07c12e94eb4e6f4ab72818bcAndrew Lee showManagementUi(); 573151f53974425c6b07c12e94eb4e6f4ab72818bcAndrew Lee } 583663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee } 593663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee 6091cd89c9ca486624850cdb0aaec86882a30c18a7Andrew Lee /** 6191cd89c9ca486624850cdb0aaec86882a30c18a7Andrew Lee * Shows fragment with the list of currently blocked numbers and settings related to blocking. 6291cd89c9ca486624850cdb0aaec86882a30c18a7Andrew Lee */ 638d0847ca13ca46730756e1d3a3dff3d7d27fd18bAndrew Lee public void showManagementUi() { 649af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee BlockedNumbersFragment fragment = (BlockedNumbersFragment) getFragmentManager() 653663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee .findFragmentByTag(TAG_BLOCKED_MANAGEMENT_FRAGMENT); 663663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee if (fragment == null) { 679af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee fragment = new BlockedNumbersFragment(); 683663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee } 69e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong 709af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee getFragmentManager().beginTransaction() 719af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee .replace(R.id.blocked_numbers_activity_container, fragment, 729af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee TAG_BLOCKED_MANAGEMENT_FRAGMENT) 739af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee .commit(); 74f96bb18b904dada96002cb72d862097ae344db57Yorke Lee 75f96bb18b904dada96002cb72d862097ae344db57Yorke Lee Logger.logScreenView(ScreenEvent.BLOCKED_NUMBER_MANAGEMENT, this); 763663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee } 773663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee 7891cd89c9ca486624850cdb0aaec86882a30c18a7Andrew Lee /** 7991cd89c9ca486624850cdb0aaec86882a30c18a7Andrew Lee * Shows fragment with search UI for browsing/finding numbers to block. 8091cd89c9ca486624850cdb0aaec86882a30c18a7Andrew Lee */ 8191cd89c9ca486624850cdb0aaec86882a30c18a7Andrew Lee public void showSearchUi() { 823663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee BlockedListSearchFragment fragment = (BlockedListSearchFragment) getFragmentManager() 833663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee .findFragmentByTag(TAG_BLOCKED_SEARCH_FRAGMENT); 843663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee if (fragment == null) { 853663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee fragment = new BlockedListSearchFragment(); 863663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee fragment.setHasOptionsMenu(false); 873663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee fragment.setShowEmptyListForNullQuery(true); 883663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee fragment.setDirectorySearchEnabled(false); 893663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee } 903663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee 919af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee getFragmentManager().beginTransaction() 929af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee .replace(R.id.blocked_numbers_activity_container, fragment, 939af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee TAG_BLOCKED_SEARCH_FRAGMENT) 949af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee .addToBackStack(null) 959af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee .commit(); 96f96bb18b904dada96002cb72d862097ae344db57Yorke Lee 97f96bb18b904dada96002cb72d862097ae344db57Yorke Lee Logger.logScreenView(ScreenEvent.BLOCKED_NUMBER_ADD_NUMBER, this); 98e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong } 99e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong 10091cd89c9ca486624850cdb0aaec86882a30c18a7Andrew Lee /** 10191cd89c9ca486624850cdb0aaec86882a30c18a7Andrew Lee * Shows fragment with UI to preview the numbers of contacts currently marked as 10291cd89c9ca486624850cdb0aaec86882a30c18a7Andrew Lee * send-to-voicemail in Contacts. These numbers can be imported into Dialer's blocked number 10391cd89c9ca486624850cdb0aaec86882a30c18a7Andrew Lee * list. 10491cd89c9ca486624850cdb0aaec86882a30c18a7Andrew Lee */ 1059af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee public void showNumbersToImportPreviewUi() { 1069af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee ViewNumbersToImportFragment fragment = (ViewNumbersToImportFragment) getFragmentManager() 1079af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee .findFragmentByTag(TAG_VIEW_NUMBERS_TO_IMPORT_FRAGMENT); 1089af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee if (fragment == null) { 1099af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee fragment = new ViewNumbersToImportFragment(); 110e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong } 1119af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee 1129af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee getFragmentManager().beginTransaction() 1139af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee .replace(R.id.blocked_numbers_activity_container, fragment, 1149af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee TAG_VIEW_NUMBERS_TO_IMPORT_FRAGMENT) 1159af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee .addToBackStack(null) 1169af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee .commit(); 1173663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee } 1183663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee 1193663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee @Override 1203663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee public boolean onOptionsItemSelected(MenuItem item) { 1213663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee if (item.getItemId() == android.R.id.home) { 1223663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee onBackPressed(); 1233663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee return true; 124e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong } 1253663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee return false; 126e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong } 127e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong 128e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong @Override 1293663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee public void onBackPressed() { 1309af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee // TODO: Achieve back navigation without overriding onBackPressed. 1319af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee if (getFragmentManager().getBackStackEntryCount() > 0) { 1329af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee getFragmentManager().popBackStack(); 1333663afe2e1afb109e117e5b707e8ed9547ed2103Andrew Lee } else { 1349af1b36e999036f4045b07285962cfdb7bfbcca7Andrew Lee super.onBackPressed(); 135e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong } 136e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong } 137e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong 138e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong @Override 139e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong public boolean isActionBarShowing() { 1406d13e7f7560169826a9cec38ec654d63d4b38873Andrew Lee return false; 141e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong } 142e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong 143e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong @Override 144e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong public boolean isDialpadShown() { 145e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong return false; 146e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong } 147e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong 148e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong @Override 149e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong public int getDialpadHeight() { 150e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong return 0; 151e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong } 152e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong 153e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong @Override 154e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong public int getActionBarHideOffset() { 1556d13e7f7560169826a9cec38ec654d63d4b38873Andrew Lee return 0; 156e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong } 157e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong 158e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong @Override 159e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong public int getActionBarHeight() { 1606d13e7f7560169826a9cec38ec654d63d4b38873Andrew Lee return 0; 161e78b54ce7bbe51501e3c2a7f269bcdc0334d425aAnne Rong } 162ebf615b14a200d87b72629dc40ae19780f1d0becAndrew Lee} 163