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