1dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee/*
2dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee * Copyright (C) 2013 The Android Open Source Project
3dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee *
4dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee * Licensed under the Apache License, Version 2.0 (the "License");
5dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee * you may not use this file except in compliance with the License.
6dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee * You may obtain a copy of the License at
7dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee *
8dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee *      http://www.apache.org/licenses/LICENSE-2.0
9dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee *
10dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee * Unless required by applicable law or agreed to in writing, software
11dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee * distributed under the License is distributed on an "AS IS" BASIS,
12dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee * See the License for the specific language governing permissions and
14dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee * limitations under the License.
15dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee */
162e5b34b14181f367ec90198f5cbcd39f261b7bf5Jay Shraunerpackage com.android.dialer.list;
17dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee
18dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Leeimport android.app.Activity;
19e142481570d7fbda5d035555fe217314e396ae90Yorke Leeimport android.content.Intent;
209da8fb46fa21159321295119e1b2075747cfbbf9Andrew Leeimport android.content.res.Resources;
21781ee24f91f6eb6a1687d803971196f2bf71c02bYorke Leeimport android.os.Bundle;
22466358780c0bd5cbb2c2300c321e94e60372b5e1Yorke Leeimport android.text.TextUtils;
23f42a1790c5bbf2be1ed71858897d72898e414235Yorke Leeimport android.view.View;
249da8fb46fa21159321295119e1b2075747cfbbf9Andrew Leeimport android.view.animation.Interpolator;
25dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Leeimport android.widget.AbsListView;
26dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Leeimport android.widget.AbsListView.OnScrollListener;
2786e21f733049560e77b92f17a58474312d72ec3eYorke Leeimport android.widget.ListView;
28dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee
29ef2b7388569a94432278a617b528f628385fbb8cYorke Leeimport com.android.contacts.common.list.ContactEntryListAdapter;
3005de701306a4986e91a9b2b2eed3bce71d6d9e6fAlon Albertimport com.android.contacts.common.list.ContactListItemView;
31e142481570d7fbda5d035555fe217314e396ae90Yorke Leeimport com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
32dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Leeimport com.android.contacts.common.list.PhoneNumberPickerFragment;
33781ee24f91f6eb6a1687d803971196f2bf71c02bYorke Leeimport com.android.contacts.common.util.ViewUtil;
34e142481570d7fbda5d035555fe217314e396ae90Yorke Leeimport com.android.dialer.DialtactsActivity;
35e142481570d7fbda5d035555fe217314e396ae90Yorke Leeimport com.android.dialer.R;
36466358780c0bd5cbb2c2300c321e94e60372b5e1Yorke Leeimport com.android.dialer.util.DialerUtils;
37fd723cae1dc2de0f83ec14639d4431674dd3b82eSai Cheemalapatiimport com.android.phone.common.animation.AnimUtils;
38dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee
398898cd0577d41cfa4e6acf785c9e904bd71fbdfdYorke Leepublic class SearchFragment extends PhoneNumberPickerFragment {
40dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee
41dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee    private OnListFragmentScrolledListener mActivityScrollListener;
42dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee
43466358780c0bd5cbb2c2300c321e94e60372b5e1Yorke Lee    /*
44466358780c0bd5cbb2c2300c321e94e60372b5e1Yorke Lee     * Stores the untouched user-entered string that is used to populate the add to contacts
45466358780c0bd5cbb2c2300c321e94e60372b5e1Yorke Lee     * intent.
46466358780c0bd5cbb2c2300c321e94e60372b5e1Yorke Lee     */
47466358780c0bd5cbb2c2300c321e94e60372b5e1Yorke Lee    private String mAddToContactNumber;
4833932ff9433bcd172749d416c23655c8d8bdafc2Yorke Lee    private int mActionBarHeight;
499da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee    private int mShadowHeight;
509da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee    private int mPaddingTop;
519da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee    private int mShowDialpadDuration;
529da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee    private int mHideDialpadDuration;
539da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee
549da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee    private HostInterface mActivity;
55466358780c0bd5cbb2c2300c321e94e60372b5e1Yorke Lee
565253be0d57edd4cdf5fbc0a980188e13e009c083Yorke Lee    public interface HostInterface {
575253be0d57edd4cdf5fbc0a980188e13e009c083Yorke Lee        public boolean isActionBarShowing();
589da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        public boolean isDialpadShown();
595253be0d57edd4cdf5fbc0a980188e13e009c083Yorke Lee        public int getActionBarHideOffset();
605253be0d57edd4cdf5fbc0a980188e13e009c083Yorke Lee        public int getActionBarHeight();
615253be0d57edd4cdf5fbc0a980188e13e009c083Yorke Lee    }
625253be0d57edd4cdf5fbc0a980188e13e009c083Yorke Lee
63dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee    @Override
64dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee    public void onAttach(Activity activity) {
65dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee        super.onAttach(activity);
66dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee
67dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee        setQuickContactEnabled(true);
68331f457e9ac7b41fc8c43000ed989a3c09d68f62Andrew Lee        setAdjustSelectionBoundsEnabled(false);
69dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee        setDarkTheme(false);
7037a53ad46134f9eaf3647c12f130c55652bbd624Andrew Lee        setPhotoPosition(ContactListItemView.getDefaultPhotoPosition(false /* opposite */));
71dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee        setUseCallableUri(true);
722d7faf6c13212f8a035609181de4f594a76af960Sai Cheemalapati        sendScreenView();
73dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee
74dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee        try {
75dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee            mActivityScrollListener = (OnListFragmentScrolledListener) activity;
76dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee        } catch (ClassCastException e) {
77dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee            throw new ClassCastException(activity.toString()
78dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee                    + " must implement OnListFragmentScrolledListener");
79dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee        }
80dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee    }
81dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee
82dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee    @Override
83dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee    public void onStart() {
84dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee        super.onStart();
85ef2b7388569a94432278a617b528f628385fbb8cYorke Lee        if (isSearchMode()) {
86ef2b7388569a94432278a617b528f628385fbb8cYorke Lee            getAdapter().setHasHeader(0, false);
87ef2b7388569a94432278a617b528f628385fbb8cYorke Lee        }
8886e21f733049560e77b92f17a58474312d72ec3eYorke Lee
899da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        mActivity = (HostInterface) getActivity();
905253be0d57edd4cdf5fbc0a980188e13e009c083Yorke Lee
919da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        final Resources res = getResources();
929da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        mActionBarHeight = mActivity.getActionBarHeight();
939da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        mShadowHeight  = res.getDrawable(R.drawable.search_shadow).getIntrinsicHeight();
949da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        mPaddingTop = res.getDimensionPixelSize(R.dimen.search_list_padding_top);
959da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        mShowDialpadDuration = res.getInteger(R.integer.dialpad_slide_in_duration);
969da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        mHideDialpadDuration = res.getInteger(R.integer.dialpad_slide_out_duration);
97f42a1790c5bbf2be1ed71858897d72898e414235Yorke Lee
98f42a1790c5bbf2be1ed71858897d72898e414235Yorke Lee        final View parentView = getView();
99f42a1790c5bbf2be1ed71858897d72898e414235Yorke Lee
100f42a1790c5bbf2be1ed71858897d72898e414235Yorke Lee        final ListView listView = getListView();
1019da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee
1020e6d7b0458e5ed52c9e53ad0ddea0a3e6fc3d768Nancy Chen        listView.setBackgroundColor(res.getColor(R.color.background_dialer_results));
1039da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        listView.setClipToPadding(false);
104331f457e9ac7b41fc8c43000ed989a3c09d68f62Andrew Lee        setVisibleScrollbarEnabled(false);
10586e21f733049560e77b92f17a58474312d72ec3eYorke Lee        listView.setOnScrollListener(new OnScrollListener() {
106dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee            @Override
107dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee            public void onScrollStateChanged(AbsListView view, int scrollState) {
108dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee                mActivityScrollListener.onListFragmentScrollStateChange(scrollState);
109dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee            }
110dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee
111dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee            @Override
112dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
113dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee                    int totalItemCount) {
114dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee            }
115dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee        });
1169da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee
1179da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        updatePosition(false /* animate */);
118dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee    }
119dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee
120dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee    @Override
121781ee24f91f6eb6a1687d803971196f2bf71c02bYorke Lee    public void onViewCreated(View view, Bundle savedInstanceState) {
122781ee24f91f6eb6a1687d803971196f2bf71c02bYorke Lee        super.onViewCreated(view, savedInstanceState);
123781ee24f91f6eb6a1687d803971196f2bf71c02bYorke Lee        ViewUtil.addBottomPaddingToListViewForFab(getListView(), getResources());
124781ee24f91f6eb6a1687d803971196f2bf71c02bYorke Lee    }
125781ee24f91f6eb6a1687d803971196f2bf71c02bYorke Lee
126781ee24f91f6eb6a1687d803971196f2bf71c02bYorke Lee    @Override
127dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee    protected void setSearchMode(boolean flag) {
128dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee        super.setSearchMode(flag);
129dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee        // This hides the "All contacts with phone numbers" header in the search fragment
130ef2b7388569a94432278a617b528f628385fbb8cYorke Lee        final ContactEntryListAdapter adapter = getAdapter();
131ef2b7388569a94432278a617b528f628385fbb8cYorke Lee        if (adapter != null) {
132ef2b7388569a94432278a617b528f628385fbb8cYorke Lee            adapter.setHasHeader(0, false);
133ef2b7388569a94432278a617b528f628385fbb8cYorke Lee        }
134dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee    }
135e142481570d7fbda5d035555fe217314e396ae90Yorke Lee
136466358780c0bd5cbb2c2300c321e94e60372b5e1Yorke Lee    public void setAddToContactNumber(String addToContactNumber) {
137466358780c0bd5cbb2c2300c321e94e60372b5e1Yorke Lee        mAddToContactNumber = addToContactNumber;
138466358780c0bd5cbb2c2300c321e94e60372b5e1Yorke Lee    }
139466358780c0bd5cbb2c2300c321e94e60372b5e1Yorke Lee
140e142481570d7fbda5d035555fe217314e396ae90Yorke Lee    @Override
141e142481570d7fbda5d035555fe217314e396ae90Yorke Lee    protected ContactEntryListAdapter createListAdapter() {
142e142481570d7fbda5d035555fe217314e396ae90Yorke Lee        DialerPhoneNumberListAdapter adapter = new DialerPhoneNumberListAdapter(getActivity());
143e142481570d7fbda5d035555fe217314e396ae90Yorke Lee        adapter.setDisplayPhotos(true);
144e142481570d7fbda5d035555fe217314e396ae90Yorke Lee        adapter.setUseCallableUri(super.usesCallableUri());
145e142481570d7fbda5d035555fe217314e396ae90Yorke Lee        return adapter;
146e142481570d7fbda5d035555fe217314e396ae90Yorke Lee    }
147e142481570d7fbda5d035555fe217314e396ae90Yorke Lee
148e142481570d7fbda5d035555fe217314e396ae90Yorke Lee    @Override
149e142481570d7fbda5d035555fe217314e396ae90Yorke Lee    protected void onItemClick(int position, long id) {
150e142481570d7fbda5d035555fe217314e396ae90Yorke Lee        final DialerPhoneNumberListAdapter adapter = (DialerPhoneNumberListAdapter) getAdapter();
151e142481570d7fbda5d035555fe217314e396ae90Yorke Lee        final int shortcutType = adapter.getShortcutTypeFromPosition(position);
152fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee        final OnPhoneNumberPickerActionListener listener;
153fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee
154fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee        switch (shortcutType) {
155fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee            case DialerPhoneNumberListAdapter.SHORTCUT_INVALID:
156fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                super.onItemClick(position, id);
157fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                break;
158fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee            case DialerPhoneNumberListAdapter.SHORTCUT_DIRECT_CALL:
159fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                listener = getOnPhoneNumberPickerListener();
160fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                if (listener != null) {
161fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                    listener.onCallNumberDirectly(getQueryString());
162fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                }
163fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                break;
164fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee            case DialerPhoneNumberListAdapter.SHORTCUT_ADD_NUMBER_TO_CONTACTS:
165fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                final String number = TextUtils.isEmpty(mAddToContactNumber) ?
166fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                        adapter.getFormattedQueryString() : mAddToContactNumber;
167fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                final Intent intent = DialtactsActivity.getAddNumberToContactIntent(number);
168fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                DialerUtils.startActivityWithErrorToast(getActivity(), intent,
169fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                        R.string.add_contact_not_available);
170fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                break;
171fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee            case DialerPhoneNumberListAdapter.SHORTCUT_MAKE_VIDEO_CALL:
172fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                listener = getOnPhoneNumberPickerListener();
173fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                if (listener != null) {
174fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                    listener.onCallNumberDirectly(getQueryString(), true /* isVideoCall */);
175fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                }
176fc1fed72d6adf5158be271646655056b14d1ccf2Andrew Lee                break;
177e142481570d7fbda5d035555fe217314e396ae90Yorke Lee        }
178e142481570d7fbda5d035555fe217314e396ae90Yorke Lee    }
1799da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee
1809da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee    /**
1819da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee     * Updates the position and padding of the search fragment, depending on whether the dialpad is
1829da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee     * shown. This can be optionally animated.
1839da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee     * @param animate
1849da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee     */
1859da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee    public void updatePosition(boolean animate) {
1869da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        // Use negative shadow height instead of 0 to account for the 9-patch's shadow.
1879da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        int startTranslationValue =
1889da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee                mActivity.isDialpadShown() ? mActionBarHeight - mShadowHeight: -mShadowHeight;
18964d674bb389d89f9d94c75f2b7cab705961d5c2dSai Cheemalapati        int endTranslationValue = 0;
19064d674bb389d89f9d94c75f2b7cab705961d5c2dSai Cheemalapati        // Prevents ListView from being translated down after a rotation when the ActionBar is up.
19164d674bb389d89f9d94c75f2b7cab705961d5c2dSai Cheemalapati        if (animate || mActivity.isActionBarShowing()) {
19264d674bb389d89f9d94c75f2b7cab705961d5c2dSai Cheemalapati            endTranslationValue =
19364d674bb389d89f9d94c75f2b7cab705961d5c2dSai Cheemalapati                    mActivity.isDialpadShown() ? 0 : mActionBarHeight -mShadowHeight;
19464d674bb389d89f9d94c75f2b7cab705961d5c2dSai Cheemalapati        }
1959da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        if (animate) {
1969da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee            Interpolator interpolator =
1979da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee                    mActivity.isDialpadShown() ? AnimUtils.EASE_IN : AnimUtils.EASE_OUT ;
1989da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee            int duration =
1999da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee                    mActivity.isDialpadShown() ? mShowDialpadDuration : mHideDialpadDuration;
2009da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee            getView().setTranslationY(startTranslationValue);
2019da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee            getView().animate()
2029da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee                    .translationY(endTranslationValue)
2039da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee                    .setInterpolator(interpolator)
2049da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee                    .setDuration(duration);
2059da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        } else {
2069da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee            getView().setTranslationY(endTranslationValue);
2079da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        }
2089da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee
2099da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        // There is padding which should only be applied when the dialpad is not shown.
2109da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        int paddingTop = mActivity.isDialpadShown() ? 0 : mPaddingTop;
2119da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        final ListView listView = getListView();
2129da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee        listView.setPaddingRelative(
2139da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee                listView.getPaddingStart(),
2149da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee                paddingTop,
2159da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee                listView.getPaddingEnd(),
2169da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee                listView.getPaddingBottom());
2179da8fb46fa21159321295119e1b2075747cfbbf9Andrew Lee    }
218dfb2eee7d98f8540fd1614db66bb03e8e1f3a26aYorke Lee}
219