Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 287a9b05 authored by Daisuke Miyakawa's avatar Daisuke Miyakawa Committed by Android (Google) Code Review
Browse files

Merge "[Phone] Fix layout for phone favorite screen"

parents f81b7813 5db4f136
Loading
Loading
Loading
Loading
+45 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2011 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<!-- Layout showing the type of account filter in phone favorite screen.

     Note: This xml is based on account_filter_header.xml and list_separator.xml.
     Some configurations (e.g. padding) are from account_filter_header.xml, while
     some other configurations (e.g. background, height, text style) are from
     list_separator.xml. See also bug 5432231. -->
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/account_filter_header_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="32dip"
    android:paddingTop="@dimen/contact_browser_list_top_margin"
    android:layout_marginLeft="@dimen/contact_browser_list_header_left_margin"
    android:layout_marginRight="@dimen/contact_browser_list_header_right_margin"
    android:background="?android:attr/selectableItemBackground"
    android:visibility="gone">
    <TextView
        android:id="@+id/account_filter_header"
        style="?android:attr/listSeparatorTextViewStyle"
        android:singleLine="true"
        android:ellipsize="end"
        android:textStyle="bold"
        android:textAllCaps="true"
        android:textColor="@color/people_app_theme_color"
        android:paddingLeft="@dimen/contact_browser_list_item_text_indent"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:background="@drawable/list_section_divider_holo_custom" />
</FrameLayout>
+1 −1
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@
        <item name="list_item_prefix_highlight_color">#729a27</item>
        <item name="list_item_header_text_indent">8dip</item>
        <item name="list_item_header_text_color">@color/people_app_theme_color</item>
        <item name="list_item_header_text_size">12sp</item>
        <item name="list_item_header_text_size">14sp</item>
        <item name="list_item_header_height">24dip</item>
        <item name="list_item_header_underline_height">1dip</item>
        <item name="list_item_header_underline_color">@color/people_app_theme_color</item>
+6 −3
Original line number Diff line number Diff line
@@ -24,8 +24,7 @@ import com.android.contacts.list.AccountFilterActivity;
import com.android.contacts.list.ContactListFilter;
import com.android.contacts.list.ContactListFilterController;
import com.android.contacts.list.ContactListFilterController.ContactListFilterListener;
import com.android.contacts.list.ContactTileAdapter.DisplayType;
import com.android.contacts.list.ContactTileListFragment;
import com.android.contacts.list.ContactListItemView;
import com.android.contacts.list.OnPhoneNumberPickerActionListener;
import com.android.contacts.list.PhoneFavoriteFragment;
import com.android.contacts.list.PhoneNumberPickerFragment;
@@ -505,6 +504,7 @@ public class DialtactsActivity extends Activity {
            mSearchFragment.setOnPhoneNumberPickerActionListener(mPhoneNumberPickerActionListener);
            mSearchFragment.setQuickContactEnabled(true);
            mSearchFragment.setDarkTheme(true);
            mSearchFragment.setPhotoPosition(ContactListItemView.PhotoPosition.LEFT);
            final FragmentTransaction transaction = getFragmentManager().beginTransaction();
            if (mInSearchUi) {
                transaction.show(mSearchFragment);
@@ -769,10 +769,13 @@ public class DialtactsActivity extends Activity {
                filterOptionMenuItem.setVisible(true);
                filterOptionMenuItem.setOnMenuItemClickListener(
                        mFilterOptionsMenuItemClickListener);
                addContactOptionMenuItem.setVisible(true);
                addContactOptionMenuItem.setIntent(
                        new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI));
            } else {
                filterOptionMenuItem.setVisible(false);
            }
                addContactOptionMenuItem.setVisible(false);
            }

            if (showCallSettingsMenu) {
                callSettingsMenuItem.setVisible(true);
+51 −42
Original line number Diff line number Diff line
@@ -213,27 +213,47 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen

        mPrefs = PreferenceManager.getDefaultSharedPreferences(activity);
        mContactsPrefs = new ContactsPreferences(activity);
    }

        // Create the account filter header but keep it hidden until "all" contacts are loaded.
        mAccountFilterHeaderContainer = View.inflate(
                activity, R.layout.account_filter_header, null);
        mAccountFilterHeaderView =
                (TextView) mAccountFilterHeaderContainer.findViewById(R.id.account_filter_header);
        mAccountFilterHeaderContainer.setOnClickListener(mFilterHeaderClickListener);
        mAccountFilterHeaderContainer.setVisibility(View.GONE);
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        final View listLayout = inflater.inflate(R.layout.contact_tile_list, container, false);

        mListView = (ListView) listLayout.findViewById(R.id.contact_tile_list);
        mListView.setItemsCanFocus(true);
        mListView.setOnItemClickListener(this);
        mListView.setFastScrollEnabled(true);
        // We want to hide the scroll bar after a while.
        mListView.setFastScrollAlwaysVisible(false);
        mListView.setVerticalScrollBarEnabled(true);
        mListView.setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_RIGHT);
        mListView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);

        initAdapters(activity);
        initAdapters(getActivity(), inflater);

        mListView.setAdapter(mAdapter);

        mEmptyView = (TextView) listLayout.findViewById(R.id.contact_tile_list_empty);
        mEmptyView.setText(getString(R.string.listTotalAllContactsZero));
        mListView.setEmptyView(mEmptyView);

        mAllContactsAdapter.setFilter(mFilter);
        mAllContactsForceReload = true;
        updateFilterHeaderView();

        return listLayout;
    }

    /**
     * Constructs and initializes {@link #mContactTileAdapter}, {@link #mAllContactsAdapter}, and
     * {@link #mAllContactsAdapter}.
     *
     * TODO: Move all the code here to {@link PhoneFavoriteMergedAdapter} if possible.
     * There are two problems: account header (whose content changes depending on filter settings)
     * and OnClickListener (which initiates {@link Activity#startActivityForResult(Intent, int)}).
     * See also issue 5429203, 5269692, and 5432286. If we are able to have a singleton for filter,
     * this work will become easier.
     */
    private void initAdapters(Context context) {
    private void initAdapters(Context context, LayoutInflater inflater) {
        mContactTileAdapter = new ContactTileAdapter(context, mContactTileAdapterListener,
                getResources().getInteger(R.integer.contact_tile_column_count),
                ContactTileAdapter.DisplayType.STREQUENT_PHONE_ONLY);
@@ -257,8 +277,21 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen
        // Put photos on left for consistency with "frequent" contacts section.
        mAllContactsAdapter.setPhotoPosition(ContactListItemView.PhotoPosition.LEFT);

        mAdapter = new PhoneFavoriteMergedAdapter(
                context, mContactTileAdapter, mAccountFilterHeaderContainer, mAllContactsAdapter);
        if (mFilter != null) {
            mAllContactsAdapter.setFilter(mFilter);
        }

        // Create the account filter header but keep it hidden until "all" contacts are loaded.
        mAccountFilterHeaderContainer = inflater.inflate(
                R.layout.phone_favorite_account_filter_header, mListView, false);
        mAccountFilterHeaderView =
                (TextView) mAccountFilterHeaderContainer.findViewById(R.id.account_filter_header);
        mAccountFilterHeaderContainer.setOnClickListener(mFilterHeaderClickListener);
        mAccountFilterHeaderContainer.setVisibility(View.GONE);

        mAdapter = new PhoneFavoriteMergedAdapter(context,
                mContactTileAdapter, mAccountFilterHeaderContainer, mAllContactsAdapter);

    }

    @Override
@@ -267,32 +300,6 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen
        mPrefs = null;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        final View listLayout = inflater.inflate(R.layout.contact_tile_list, container, false);

        mListView = (ListView) listLayout.findViewById(R.id.contact_tile_list);

        mListView.setItemsCanFocus(true);
        mListView.setAdapter(mAdapter);
        mListView.setOnItemClickListener(this);
        mListView.setFastScrollEnabled(true);
        // We want to hide the scroll bar after a while.
        mListView.setFastScrollAlwaysVisible(false);
        mListView.setVerticalScrollBarEnabled(true);
        mListView.setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_RIGHT);
        mListView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);

        mEmptyView = (TextView) listLayout.findViewById(R.id.contact_tile_list_empty);
        mEmptyView.setText(getString(R.string.listTotalAllContactsZero));
        mListView.setEmptyView(mEmptyView);

        updateFilterHeaderView();

        return listLayout;
    }

    @Override
    public void onStart() {
        super.onStart();
@@ -425,10 +432,12 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen
            ContactListFilter.storeToPreferences(mPrefs, mFilter);
        }

        if (mAllContactsAdapter != null) {
            mAllContactsAdapter.setFilter(mFilter);
            requestReloadAllContacts();
            updateFilterHeaderView();
        }
    }

    public void setListener(Listener listener) {
        mListener = listener;
+6 −1
Original line number Diff line number Diff line
@@ -53,6 +53,9 @@ public class PhoneFavoriteMergedAdapter extends BaseAdapter implements SectionIn
    private final int mItemPaddingLeft;
    private final int mItemPaddingRight;

    // Make frequent header consistent with account filter header.
    private final int mFrequentHeaderPaddingTop;

    private final DataSetObserver mObserver;

    public PhoneFavoriteMergedAdapter(Context context,
@@ -62,6 +65,8 @@ public class PhoneFavoriteMergedAdapter extends BaseAdapter implements SectionIn
        Resources resources = context.getResources();
        mItemPaddingLeft = resources.getDimensionPixelSize(R.dimen.detail_item_side_margin);
        mItemPaddingRight = resources.getDimensionPixelSize(R.dimen.list_visible_scrollbar_padding);
        mFrequentHeaderPaddingTop = resources.getDimensionPixelSize(
                R.dimen.contact_browser_list_top_margin);
        mContactTileAdapter = contactTileAdapter;
        mContactEntryListAdapter = contactEntryListAdapter;

@@ -140,7 +145,7 @@ public class PhoneFavoriteMergedAdapter extends BaseAdapter implements SectionIn
            if (position < frequentHeaderPosition) {  // "starred" contacts
                // No padding adjustment.
            } else if (position == frequentHeaderPosition) {
                view.setPadding(mItemPaddingLeft, view.getPaddingTop(),
                view.setPadding(mItemPaddingLeft, mFrequentHeaderPaddingTop,
                        mItemPaddingRight, view.getPaddingBottom());
            } else {
                // Views for "frequent" contacts use FrameLayout's margins instead of padding.
Loading