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