merge in ics-mr1-release history after reset to ics-mr1
diff --git a/res/layout/call_log_fragment.xml b/res/layout/call_log_fragment.xml
index f87e981..d652ad7 100644
--- a/res/layout/call_log_fragment.xml
+++ b/res/layout/call_log_fragment.xml
@@ -19,7 +19,9 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
- android:paddingBottom="?android:attr/actionBarSize">
+ android:paddingBottom="?android:attr/actionBarSize"
+ android:divider="?android:attr/dividerHorizontal"
+ android:showDividers="end">
<FrameLayout
android:id="@+id/voicemail_status"
diff --git a/res/layout/dialpad_fragment.xml b/res/layout/dialpad_fragment.xml
index 2785af0..df13372 100644
--- a/res/layout/dialpad_fragment.xml
+++ b/res/layout/dialpad_fragment.xml
@@ -38,7 +38,6 @@
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="match_parent"
- android:layout_alignParentLeft="true"
android:gravity="center"
android:textAppearance="@style/DialtactsDigitsTextAppearance"
android:textColor="?android:attr/textColorPrimary"
@@ -46,15 +45,15 @@
android:background="@android:color/transparent" />
<ImageButton
- android:id="@+id/overflow_menu"
- android:layout_width="48dip"
+ android:id="@+id/deleteButton"
+ android:layout_width="56dip"
android:layout_height="match_parent"
- android:layout_alignParentRight="true"
- android:src="@drawable/ic_menu_overflow"
- android:contentDescription="@*android:string/action_menu_overflow_description"
- android:nextFocusLeft="@id/digits"
- android:background="?android:attr/selectableItemBackground"/>
-
+ android:layout_gravity="center_vertical"
+ android:gravity="center"
+ android:state_enabled="false"
+ android:background="?android:attr/selectableItemBackground"
+ android:contentDescription="@string/description_delete_button"
+ android:src="@drawable/ic_dial_action_delete" />
</LinearLayout>
<!-- Keypad section -->
@@ -65,8 +64,44 @@
android:layout_height="@dimen/dialpad_vertical_margin"
android:background="#66000000"/>
- <!-- Horizontal row of buttons (Search + DialButton + Delete.) -->
- <include layout="@layout/dialpad_additional_buttons" />
+ <LinearLayout
+ android:id="@+id/dialButtonContainer"
+ android:layout_width="match_parent"
+ android:layout_height="0px"
+ android:layout_weight="@integer/dialpad_layout_weight_additional_buttons"
+ android:layout_gravity="center_horizontal"
+ android:background="@drawable/dialpad_background">
+ <ImageButton
+ android:id="@+id/searchButton"
+ android:layout_width="wrap_content"
+ android:layout_height="?android:attr/actionBarSize"
+ android:layout_gravity="bottom|center_horizontal"
+ android:state_enabled="false"
+ android:background="?android:attr/selectableItemBackground"
+ android:contentDescription="@string/description_search_button"
+ android:src="@drawable/ic_dial_action_search"/>
+
+ <ImageButton
+ android:id="@+id/dialButton"
+ android:layout_width="0px"
+ android:layout_weight="1"
+ android:layout_height="match_parent"
+ android:layout_gravity="center"
+ android:state_enabled="false"
+ android:background="@drawable/btn_call"
+ android:contentDescription="@string/description_dial_button"
+ android:src="@drawable/ic_dial_action_call" />
+
+ <ImageButton
+ android:id="@+id/overflow_menu"
+ android:layout_width="wrap_content"
+ android:layout_height="?android:attr/actionBarSize"
+ android:layout_gravity="bottom|center_horizontal"
+ android:src="@drawable/ic_menu_overflow"
+ android:contentDescription="@*android:string/action_menu_overflow_description"
+ android:nextFocusLeft="@id/digits"
+ android:background="?android:attr/selectableItemBackground"/>
+ </LinearLayout>
<!-- "Dialpad chooser" UI, shown only when the user brings up the
Dialer while a call is already in progress.
diff --git a/res/layout/empty2.xml b/res/layout/empty2.xml
new file mode 100644
index 0000000..349dcfa
--- /dev/null
+++ b/res/layout/empty2.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+
+<!-- Hack for show empty hidden menu item without using android:icon.
+ See dialtact_options.xml for more detail.
+
+ TODO: figure out better way -->
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/ic_dial_action_search"
+ android:visibility="invisible"/>
+</FrameLayout>
diff --git a/res/layout/phone_contact_tile_list.xml b/res/layout/phone_contact_tile_list.xml
new file mode 100644
index 0000000..29ceb19
--- /dev/null
+++ b/res/layout/phone_contact_tile_list.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+
+<!-- Use LinearLayout + FrameLayout, just to rely on android:divider and android:showDividers -->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:paddingBottom="?android:attr/actionBarSize"
+ android:divider="?android:attr/dividerHorizontal"
+ android:showDividers="end">
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <ListView
+ android:id="@+id/contact_tile_list"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingTop="@dimen/contact_tile_list_padding_top"
+ android:clipToPadding="false"
+ android:fadingEdge="none"
+ android:divider="@null" />
+
+ <TextView
+ android:id="@+id/contact_tile_list_empty"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center_horizontal"
+ android:layout_marginTop="@dimen/empty_message_top_margin"
+ android:textColor="?android:attr/textColorSecondary"
+ android:textAppearance="?android:attr/textAppearanceLarge"/>
+ </FrameLayout>
+</LinearLayout>
diff --git a/res/menu/dialtacts_options.xml b/res/menu/dialtacts_options.xml
index 54ca086..d8c79e4 100644
--- a/res/menu/dialtacts_options.xml
+++ b/res/menu/dialtacts_options.xml
@@ -37,4 +37,16 @@
android:id="@+id/add_contact"
android:title="@string/menu_newContact"
android:showAsAction="withText" />
+
+ <!-- Ugly hack: empty item never clickable.
+ This is for forcing search icon on left even when there's a single item
+ in the bottom ActionBar.
+ We intentionally don't use android:icon to avoid other issues around item with
+ a null icon.
+
+ TODO: look for better idea. -->
+ <item
+ android:id="@+id/fake_menu_item"
+ android:actionLayout="@layout/empty2"
+ android:showAsAction="ifRoom" />
</menu>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index ece881e..f22ff1d 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -284,7 +284,7 @@
</style>
<style name="DialtactsActionBarStyle" parent="android:Widget.Holo.ActionBar">
- <item name="android:backgroundSplit">@drawable/ab_bottom_opaque_dark_holo</item>
+ <item name="android:backgroundSplit">@null</item>
<item name="android:backgroundStacked">@drawable/ab_stacked_opaque_dark_holo</item>
<item name="android:displayOptions"></item>
</style>
diff --git a/src/com/android/contacts/activities/DialtactsActivity.java b/src/com/android/contacts/activities/DialtactsActivity.java
index 7e95fed..9abcdf4 100644
--- a/src/com/android/contacts/activities/DialtactsActivity.java
+++ b/src/com/android/contacts/activities/DialtactsActivity.java
@@ -78,6 +78,8 @@
public class DialtactsActivity extends TransactionSafeActivity {
private static final String TAG = "DialtactsActivity";
+ private static final boolean DEBUG = false;
+
/** Used to open Call Setting */
private static final String PHONE_PACKAGE = "com.android.phone";
private static final String CALL_SETTINGS_CLASS_NAME =
@@ -143,6 +145,23 @@
}
}
+ /**
+ * True when the app detects user's drag event. This variable should not become true when
+ * mUserTabClick is true.
+ *
+ * During user's drag or tab click, we shouldn't show fake buttons but just show real
+ * ActionBar at the bottom of the screen, for transition animation.
+ */
+ boolean mDuringSwipe = false;
+ /**
+ * True when the app detects user's tab click (at the top of the screen). This variable should
+ * not become true when mDuringSwipe is true.
+ *
+ * During user's drag or tab click, we shouldn't show fake buttons but just show real
+ * ActionBar at the bottom of the screen, for transition animation.
+ */
+ boolean mUserTabClick = false;
+
private class PageChangeListener implements OnPageChangeListener {
private int mCurrentPosition = -1;
/**
@@ -158,7 +177,17 @@
@Override
public void onPageSelected(int position) {
+ if (DEBUG) Log.d(TAG, "onPageSelected: " + position);
final ActionBar actionBar = getActionBar();
+ if (mDialpadFragment != null && !mDuringSwipe) {
+ if (DEBUG) {
+ Log.d(TAG, "Immediately show/hide fake menu buttons. position: "
+ + position + ", dragging: " + mDuringSwipe);
+ }
+ mDialpadFragment.updateFakeMenuButtonsVisibility(
+ position == TAB_INDEX_DIALER && !mDuringSwipe);
+ }
+
if (mCurrentPosition == position) {
Log.w(TAG, "Previous position and next position became same (" + position + ")");
}
@@ -175,6 +204,11 @@
public void onPageScrollStateChanged(int state) {
switch (state) {
case ViewPager.SCROLL_STATE_IDLE: {
+ if (DEBUG) Log.d(TAG, "onPageScrollStateChanged() with SCROLL_STATE_IDLE");
+ // Interpret IDLE as the end of migration (both swipe and tab click)
+ mDuringSwipe = false;
+ mUserTabClick = false;
+
if (mCurrentPosition >= 0) {
sendFragmentVisibilityChange(mCurrentPosition, false);
}
@@ -186,8 +220,24 @@
mCurrentPosition = mNextPosition;
break;
}
- case ViewPager.SCROLL_STATE_DRAGGING:
- case ViewPager.SCROLL_STATE_SETTLING:
+ case ViewPager.SCROLL_STATE_DRAGGING: {
+ if (DEBUG) Log.d(TAG, "onPageScrollStateChanged() with SCROLL_STATE_DRAGGING");
+ mDuringSwipe = true;
+ mUserTabClick = false;
+
+ if (mCurrentPosition == TAB_INDEX_DIALER) {
+ sendFragmentVisibilityChange(TAB_INDEX_DIALER, false);
+ sendFragmentVisibilityChange(TAB_INDEX_CALL_LOG, true);
+ invalidateOptionsMenu();
+ }
+ break;
+ }
+ case ViewPager.SCROLL_STATE_SETTLING: {
+ if (DEBUG) Log.d(TAG, "onPageScrollStateChanged() with SCROLL_STATE_SETTLING");
+ mDuringSwipe = true;
+ mUserTabClick = false;
+ break;
+ }
default:
break;
}
@@ -230,10 +280,26 @@
private final TabListener mTabListener = new TabListener() {
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
+ if (DEBUG) Log.d(TAG, "onTabUnselected(). tab: " + tab);
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
+ if (DEBUG) {
+ Log.d(TAG, "onTabSelected(). tab: " + tab + ", mDuringSwipe: " + mDuringSwipe);
+ }
+ // When the user swipes the screen horizontally, this method will be called after
+ // ViewPager.SCROLL_STATE_DRAGGING and ViewPager.SCROLL_STATE_SETTLING events, while
+ // when the user clicks a tab at the ActionBar at the top, this will be called before
+ // them. This logic interprets the order difference as a difference of the user action.
+ if (!mDuringSwipe) {
+ if (mDialpadFragment != null) {
+ if (DEBUG) Log.d(TAG, "Immediately hide fake buttons for tab selection case");
+ mDialpadFragment.updateFakeMenuButtonsVisibility(false);
+ }
+ mUserTabClick = true;
+ }
+
if (mViewPager.getCurrentItem() != tab.getPosition()) {
mViewPager.setCurrentItem(tab.getPosition(), true);
}
@@ -249,6 +315,7 @@
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
+ if (DEBUG) Log.d(TAG, "onTabReselected");
}
};
@@ -436,6 +503,12 @@
if (mSearchFragment != null) {
mSearchFragment.setFilter(mContactListFilterController.getFilter());
}
+
+ if (mDuringSwipe || mUserTabClick) {
+ if (DEBUG) Log.d(TAG, "reset buggy flag state..");
+ mDuringSwipe = false;
+ mUserTabClick = false;
+ }
}
@Override
@@ -659,6 +732,8 @@
// Restore to the previous manual selection
mLastManuallySelectedFragment = savedTabIndex;
+ mDuringSwipe = false;
+ mUserTabClick = false;
}
@Override
@@ -776,6 +851,7 @@
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 fakeMenuItem = menu.findItem(R.id.fake_menu_item);
Tab tab = getActionBar().getSelectedTab();
if (mInSearchUi) {
searchMenuItem.setVisible(false);
@@ -792,17 +868,33 @@
addContactOptionMenuItem.setVisible(false);
}
callSettingsMenuItem.setVisible(false);
+ fakeMenuItem.setVisible(false);
} else {
final boolean showCallSettingsMenu;
if (tab != null && tab.getPosition() == TAB_INDEX_DIALER) {
- searchMenuItem.setVisible(false);
- // When permanent menu key is _not_ available, the call settings menu should be
- // available via DialpadFragment.
- showCallSettingsMenu = ViewConfiguration.get(this).hasPermanentMenuKey();
+ if (DEBUG) {
+ Log.d(TAG, "onPrepareOptionsMenu(dialer). swipe: " + mDuringSwipe
+ + ", user tab click: " + mUserTabClick);
+ }
+ if (mDuringSwipe || mUserTabClick) {
+ // During horizontal movement, we just show real ActionBar menu items.
+ searchMenuItem.setVisible(true);
+ searchMenuItem.setOnMenuItemClickListener(mSearchMenuItemClickListener);
+ showCallSettingsMenu = true;
+
+ fakeMenuItem.setVisible(ViewConfiguration.get(this).hasPermanentMenuKey());
+ } else {
+ 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);
+ }
} else {
searchMenuItem.setVisible(true);
searchMenuItem.setOnMenuItemClickListener(mSearchMenuItemClickListener);
showCallSettingsMenu = true;
+ fakeMenuItem.setVisible(ViewConfiguration.get(this).hasPermanentMenuKey());
}
if (tab != null && tab.getPosition() == TAB_INDEX_FAVORITES) {
filterOptionMenuItem.setVisible(true);
@@ -932,6 +1024,10 @@
sendFragmentVisibilityChange(mViewPager.getCurrentItem(), true);
+ // Before exiting the search screen, reset swipe state.
+ mDuringSwipe = false;
+ mUserTabClick = false;
+
mViewPager.setVisibility(View.VISIBLE);
hideInputMethod(getCurrentFocus());
diff --git a/src/com/android/contacts/dialpad/DialpadFragment.java b/src/com/android/contacts/dialpad/DialpadFragment.java
index 793717d..cdba30b 100644
--- a/src/com/android/contacts/dialpad/DialpadFragment.java
+++ b/src/com/android/contacts/dialpad/DialpadFragment.java
@@ -16,16 +16,6 @@
package com.android.contacts.dialpad;
-import com.android.contacts.ContactsUtils;
-import com.android.contacts.R;
-import com.android.contacts.SpecialCharSequenceMgr;
-import com.android.contacts.activities.DialtactsActivity;
-import com.android.contacts.activities.DialtactsActivity.ViewPagerVisibilityListener;
-import com.android.contacts.util.PhoneNumberFormatter;
-import com.android.internal.telephony.ITelephony;
-import com.android.phone.CallLogAsync;
-import com.android.phone.HapticFeedback;
-
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -57,6 +47,7 @@
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.method.DialerKeyListener;
+import android.util.DisplayMetrics;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -64,20 +55,25 @@
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
-import android.view.View.OnClickListener;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
-import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupMenu;
import android.widget.TextView;
-import java.util.HashSet;
-import java.util.Set;
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.R;
+import com.android.contacts.SpecialCharSequenceMgr;
+import com.android.contacts.activities.DialtactsActivity;
+import com.android.contacts.activities.DialtactsActivity.ViewPagerVisibilityListener;
+import com.android.contacts.util.PhoneNumberFormatter;
+import com.android.internal.telephony.ITelephony;
+import com.android.phone.CallLogAsync;
+import com.android.phone.HapticFeedback;
/**
* Fragment that displays a twelve-key phone dialpad.
@@ -90,6 +86,8 @@
ViewPagerVisibilityListener {
private static final String TAG = DialpadFragment.class.getSimpleName();
+ private static final boolean DEBUG = false;
+
private static final String EMPTY_NUMBER = "";
/** The length of DTMF tones in milliseconds */
@@ -116,11 +114,12 @@
private ToneGenerator mToneGenerator;
private Object mToneGeneratorLock = new Object();
private View mDialpad;
- private View mAdditionalButtonsRow;
private View mSearchButton;
+ private View mMenuButton;
private Listener mListener;
+ private View mDialButtonContainer;
private View mDialButton;
private ListView mDialpadChooser;
private DialpadChooserAdapter mDialpadChooserAdapter;
@@ -253,15 +252,28 @@
PhoneNumberFormatter.setPhoneNumberFormattingTextWatcher(getActivity(), mDigits);
+ DisplayMetrics dm = getResources().getDisplayMetrics();
+ int minCellSize = (int) (56 * dm.density); // 56dip == minimum size of menu buttons
+ int cellCount = dm.widthPixels / minCellSize;
+ int fakeMenuItemWidth = dm.widthPixels / cellCount;
+ if (DEBUG) Log.d(TAG, "The size of fake menu buttons (in pixel): " + fakeMenuItemWidth);
+
// Soft menu button should appear only when there's no hardware menu button.
- final View overflowMenuButton = fragmentView.findViewById(R.id.overflow_menu);
- if (overflowMenuButton != null) {
+ mMenuButton = fragmentView.findViewById(R.id.overflow_menu);
+ if (mMenuButton != null) {
+ mMenuButton.setMinimumWidth(fakeMenuItemWidth);
if (ViewConfiguration.get(getActivity()).hasPermanentMenuKey()) {
- overflowMenuButton.setVisibility(View.GONE);
+ // This is required for dialpad button's layout, so must not use GONE here.
+ mMenuButton.setVisibility(View.INVISIBLE);
} else {
- overflowMenuButton.setOnClickListener(this);
+ mMenuButton.setOnClickListener(this);
}
}
+ mSearchButton = fragmentView.findViewById(R.id.searchButton);
+ if (mSearchButton != null) {
+ mSearchButton.setMinimumWidth(fakeMenuItemWidth);
+ mSearchButton.setOnClickListener(this);
+ }
// Check for the presence of the keypad
View oneButton = fragmentView.findViewById(R.id.one);
@@ -269,16 +281,8 @@
setupKeypad(fragmentView);
}
- mAdditionalButtonsRow = fragmentView.findViewById(R.id.dialpadAdditionalButtons);
-
- mSearchButton = mAdditionalButtonsRow.findViewById(R.id.searchButton);
- if (mSearchButton != null) {
- mSearchButton.setOnClickListener(this);
- }
-
- // Check whether we should show the onscreen "Dial" button.
- mDialButton = mAdditionalButtonsRow.findViewById(R.id.dialButton);
-
+ mDialButtonContainer = fragmentView.findViewById(R.id.dialButtonContainer);
+ mDialButton = fragmentView.findViewById(R.id.dialButton);
if (r.getBoolean(R.bool.config_show_onscreen_dial_button)) {
mDialButton.setOnClickListener(this);
} else {
@@ -286,9 +290,11 @@
mDialButton = null;
}
- mDelete = mAdditionalButtonsRow.findViewById(R.id.deleteButton);
- mDelete.setOnClickListener(this);
- mDelete.setOnLongClickListener(this);
+ mDelete = fragmentView.findViewById(R.id.deleteButton);
+ if (mDelete != null) {
+ mDelete.setOnClickListener(this);
+ mDelete.setOnLongClickListener(this);
+ }
mDialpad = fragmentView.findViewById(R.id.dialpad); // This is null in landscape mode.
@@ -305,6 +311,8 @@
configureScreenFromIntent(getActivity().getIntent());
+ updateFakeMenuButtonsVisibility(mShowOptionsMenu);
+
return fragmentView;
}
@@ -1040,7 +1048,8 @@
mDigits.setVisibility(View.GONE);
}
if (mDialpad != null) mDialpad.setVisibility(View.GONE);
- mAdditionalButtonsRow.setVisibility(View.GONE);
+ if (mDialButtonContainer != null) mDialButtonContainer.setVisibility(View.GONE);
+
mDialpadChooser.setVisibility(View.VISIBLE);
// Instantiate the DialpadChooserAdapter and hook it up to the
@@ -1057,7 +1066,7 @@
mDigits.setVisibility(View.VISIBLE);
}
if (mDialpad != null) mDialpad.setVisibility(View.VISIBLE);
- mAdditionalButtonsRow.setVisibility(View.VISIBLE);
+ if (mDialButtonContainer != null) mDialButtonContainer.setVisibility(View.VISIBLE);
mDialpadChooser.setVisibility(View.GONE);
}
}
@@ -1446,7 +1455,34 @@
}
@Override
- public void onVisibilityChanged(boolean visible) {
- mShowOptionsMenu = visible;
+ public void onVisibilityChanged(boolean fragmentVisible) {
+ mShowOptionsMenu = fragmentVisible;
+ updateFakeMenuButtonsVisibility(fragmentVisible);
+ }
+
+ /**
+ * Update visibility of the search button and menu button at the bottom of dialer screen, which
+ * should be invisible when bottom ActionBar's real items are available and be visible
+ * otherwise.
+ *
+ * @param visible True when visible.
+ */
+ public void updateFakeMenuButtonsVisibility(boolean visible) {
+ if (DEBUG) Log.d(TAG, "updateFakeMenuButtonVisibility(" + visible + ")");
+
+ if (mSearchButton != null) {
+ if (visible) {
+ mSearchButton.setVisibility(View.VISIBLE);
+ } else {
+ mSearchButton.setVisibility(View.INVISIBLE);
+ }
+ }
+ if (mMenuButton != null) {
+ if (visible && !ViewConfiguration.get(getActivity()).hasPermanentMenuKey()) {
+ mMenuButton.setVisibility(View.VISIBLE);
+ } else {
+ mMenuButton.setVisibility(View.INVISIBLE);
+ }
+ }
}
}
diff --git a/src/com/android/contacts/list/PhoneFavoriteFragment.java b/src/com/android/contacts/list/PhoneFavoriteFragment.java
index b6e8dd6..7073a57 100644
--- a/src/com/android/contacts/list/PhoneFavoriteFragment.java
+++ b/src/com/android/contacts/list/PhoneFavoriteFragment.java
@@ -239,7 +239,8 @@
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
- final View listLayout = inflater.inflate(R.layout.contact_tile_list, container, false);
+ final View listLayout = inflater.inflate(
+ R.layout.phone_contact_tile_list, container, false);
mListView = (ListView) listLayout.findViewById(R.id.contact_tile_list);
mListView.setItemsCanFocus(true);