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

Commit 747cfd0a authored by Maurice Chu's avatar Maurice Chu
Browse files

Hide scrollbar in search mode when no contacts in Phone

This hides the scrollbar when there are no contacts in search mode.

Some refactoring has been done to make it easier to tell what menus
are made visible for each of the Phone tabs and when in search mode.
Intents and onClick listeners have been moved to the
onCreateOptionsMenu since these do not change.  Also, corrected the
test for isEmpty() in PhoneFavoriteMergedAdapter which allows the
message "No contacts" to show up when there are no contacts to list
under the Phone favorites tab.

Bug: 6036160
Change-Id: I43bbd1bd56b009736cc2a966a3ffb0ad6630792c
parent e6c9fc8e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@
            android:id="@+id/contact_tile_list_empty"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_horizontal"
            android:gravity="center"
            android:layout_marginTop="@dimen/empty_message_top_margin"
            android:textColor="?android:attr/textColorSecondary"
            android:textAppearance="?android:attr/textAppearanceLarge"/>
+1 −1
Original line number Diff line number Diff line
@@ -46,7 +46,7 @@

         TODO: look for better idea. -->
    <item
        android:id="@+id/fake_menu_item"
        android:id="@+id/empty_right_menu_item"
        android:actionLayout="@layout/empty2"
        android:showAsAction="ifRoom" />
</menu>
+108 −60
Original line number Diff line number Diff line
@@ -939,79 +939,127 @@ public class DialtactsActivity extends TransactionSafeActivity
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.dialtacts_options, menu);

        // set up intents and onClick listeners
        final MenuItem callSettingsMenuItem = menu.findItem(R.id.menu_call_settings);
        final MenuItem searchMenuItem = menu.findItem(R.id.search_on_action_bar);
        final MenuItem filterOptionMenuItem = menu.findItem(R.id.filter_option);
        final MenuItem addContactOptionMenuItem = menu.findItem(R.id.add_contact);

        callSettingsMenuItem.setIntent(DialtactsActivity.getCallSettingsIntent());
        searchMenuItem.setOnMenuItemClickListener(mSearchMenuItemClickListener);
        filterOptionMenuItem.setOnMenuItemClickListener(mFilterOptionsMenuItemClickListener);
        addContactOptionMenuItem.setIntent(
                new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI));

        return true;
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        if (mInSearchUi) {
            prepareOptionsMenuInSearchMode(menu);
        } else {
            // get reference to the currently selected tab
            final Tab tab = getActionBar().getSelectedTab();
            if (tab != null) {
                switch(tab.getPosition()) {
                    case TAB_INDEX_DIALER:
                        prepareOptionsMenuForDialerTab(menu);
                        break;
                    case TAB_INDEX_CALL_LOG:
                        prepareOptionsMenuForCallLogTab(menu);
                        break;
                    case TAB_INDEX_FAVORITES:
                        prepareOptionsMenuForFavoritesTab(menu);
                        break;
                }
            }
        }
        return true;
    }

    private void prepareOptionsMenuInSearchMode(Menu menu) {
        // get references to menu items
        final MenuItem searchMenuItem = menu.findItem(R.id.search_on_action_bar);
        final MenuItem filterOptionMenuItem = menu.findItem(R.id.filter_option);
        final MenuItem addContactOptionMenuItem = menu.findItem(R.id.add_contact);
        final MenuItem callSettingsMenuItem = menu.findItem(R.id.menu_call_settings);
        final Tab tab = getActionBar().getSelectedTab();
        final MenuItem fakeMenuItem = menu.findItem(R.id.fake_menu_item);
        if (mInSearchUi) {
        final MenuItem emptyRightMenuItem = menu.findItem(R.id.empty_right_menu_item);

        // prepare the menu items
        searchMenuItem.setVisible(false);
            if (ViewConfiguration.get(this).hasPermanentMenuKey()) {
                filterOptionMenuItem.setVisible(true);
                filterOptionMenuItem.setOnMenuItemClickListener(
                        mFilterOptionsMenuItemClickListener);
            } else {
                // Filter option menu should be not be shown as a overflow menu.
                filterOptionMenuItem.setVisible(false);
            }
        filterOptionMenuItem.setVisible(ViewConfiguration.get(this).hasPermanentMenuKey());
        addContactOptionMenuItem.setVisible(false);
        callSettingsMenuItem.setVisible(false);
            fakeMenuItem.setVisible(false);
        } else {
            final boolean showCallSettingsMenu;
            if (tab != null && tab.getPosition() == TAB_INDEX_DIALER) {
        emptyRightMenuItem.setVisible(false);
    }

    private void prepareOptionsMenuForDialerTab(Menu menu) {
        if (DEBUG) {
            Log.d(TAG, "onPrepareOptionsMenu(dialer). swipe: " + mDuringSwipe
                    + ", user tab click: " + mUserTabClick);
        }

        // get references to menu items
        final MenuItem searchMenuItem = menu.findItem(R.id.search_on_action_bar);
        final MenuItem filterOptionMenuItem = menu.findItem(R.id.filter_option);
        final MenuItem addContactOptionMenuItem = menu.findItem(R.id.add_contact);
        final MenuItem callSettingsMenuItem = menu.findItem(R.id.menu_call_settings);
        final MenuItem emptyRightMenuItem = menu.findItem(R.id.empty_right_menu_item);

        // prepare the menu items
        filterOptionMenuItem.setVisible(false);
        addContactOptionMenuItem.setVisible(false);
        if (mDuringSwipe || mUserTabClick) {
                    // During horizontal movement, we just show real ActionBar menu items.
            // During horizontal movement, the real ActionBar menu items are shown
            searchMenuItem.setVisible(true);
                    searchMenuItem.setOnMenuItemClickListener(mSearchMenuItemClickListener);
                    showCallSettingsMenu = true;

                    fakeMenuItem.setVisible(ViewConfiguration.get(this).hasPermanentMenuKey());
            callSettingsMenuItem.setVisible(true);
            // When there is a permanent menu key, there is no overflow icon on the right of
            // the action bar which would force the search menu item (if it is visible) to the
            // left.  This is the purpose of showing the emptyRightMenuItem.
            emptyRightMenuItem.setVisible(ViewConfiguration.get(this).hasPermanentMenuKey());
        } else {
            // This is when the user is looking at the dialer pad.  In this case, the real
            // ActionBar is hidden and fake menu items are shown.
            searchMenuItem.setVisible(false);
                    // When permanent menu key is _not_ available, the call settings menu should be
                    // available via DialpadFragment.
                    showCallSettingsMenu = ViewConfiguration.get(this).hasPermanentMenuKey();
                    fakeMenuItem.setVisible(false);
            // If a permanent menu key is available, then we need to show the call settings item
            // so that the call settings item can be invoked by the permanent menu key.
            callSettingsMenuItem.setVisible(ViewConfiguration.get(this).hasPermanentMenuKey());
            emptyRightMenuItem.setVisible(false);
        }
            } else {
                searchMenuItem.setVisible(true);
                searchMenuItem.setOnMenuItemClickListener(mSearchMenuItemClickListener);
                showCallSettingsMenu = true;
                fakeMenuItem.setVisible(ViewConfiguration.get(this).hasPermanentMenuKey()
                        && (tab != null && tab.getPosition() == TAB_INDEX_CALL_LOG));
    }
            if (tab != null && tab.getPosition() == TAB_INDEX_FAVORITES) {
                filterOptionMenuItem.setVisible(true);
                filterOptionMenuItem.setOnMenuItemClickListener(
                        mFilterOptionsMenuItemClickListener);
                addContactOptionMenuItem.setVisible(true);
                addContactOptionMenuItem.setIntent(
                        new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI));
            } else {

    private void prepareOptionsMenuForCallLogTab(Menu menu) {
        // get references to menu items
        final MenuItem searchMenuItem = menu.findItem(R.id.search_on_action_bar);
        final MenuItem filterOptionMenuItem = menu.findItem(R.id.filter_option);
        final MenuItem addContactOptionMenuItem = menu.findItem(R.id.add_contact);
        final MenuItem callSettingsMenuItem = menu.findItem(R.id.menu_call_settings);
        final MenuItem emptyRightMenuItem = menu.findItem(R.id.empty_right_menu_item);

        // prepare the menu items
        searchMenuItem.setVisible(true);
        filterOptionMenuItem.setVisible(false);
        addContactOptionMenuItem.setVisible(false);
            }

            if (showCallSettingsMenu) {
        callSettingsMenuItem.setVisible(true);
                callSettingsMenuItem.setIntent(DialtactsActivity.getCallSettingsIntent());
            } else {
                callSettingsMenuItem.setVisible(false);
            }
        emptyRightMenuItem.setVisible(ViewConfiguration.get(this).hasPermanentMenuKey());
    }

        return true;
    private void prepareOptionsMenuForFavoritesTab(Menu menu) {
        // get references to menu items
        final MenuItem searchMenuItem = menu.findItem(R.id.search_on_action_bar);
        final MenuItem filterOptionMenuItem = menu.findItem(R.id.filter_option);
        final MenuItem addContactOptionMenuItem = menu.findItem(R.id.add_contact);
        final MenuItem callSettingsMenuItem = menu.findItem(R.id.menu_call_settings);
        final MenuItem emptyRightMenuItem = menu.findItem(R.id.empty_right_menu_item);

        // prepare the menu items
        searchMenuItem.setVisible(true);
        filterOptionMenuItem.setVisible(true);
        addContactOptionMenuItem.setVisible(true);
        callSettingsMenuItem.setVisible(true);
        emptyRightMenuItem.setVisible(false);
    }

    @Override
+7 −0
Original line number Diff line number Diff line
@@ -76,6 +76,13 @@ public class PhoneFavoriteMergedAdapter extends BaseAdapter implements SectionIn
        mLoadingView = loadingView;
    }

    @Override
    public boolean isEmpty() {
        // Cannot use the super's method here because we add extra rows in getCount() to account
        // for headers
        return mContactTileAdapter.getCount() + mContactEntryListAdapter.getCount() == 0;
    }

    @Override
    public int getCount() {
        final int contactTileAdapterCount = mContactTileAdapter.getCount();
+11 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import com.android.contacts.list.ShortcutIntentBuilder.OnShortcutIntentCreatedLi
import com.android.contacts.util.AccountFilterUtil;

import android.content.Intent;
import android.content.Loader;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
@@ -28,6 +30,7 @@ import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 * Fragment containing a phone number list for picking.
@@ -188,6 +191,14 @@ public class PhoneNumberPickerFragment extends ContactEntryListFragment<ContactE
        super.startLoading();
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        super.onLoadFinished(loader, data);

        // disable scroll bar if there is no data
        setVisibleScrollbarEnabled(data.getCount() > 0);
    }

    public void setUseCallableUri(boolean useCallableUri) {
        mUseCallableUri = useCallableUri;
    }