Refactor ActionBarController and tests
The original CL to fix ActionBarControllerTest by using an
ActivityInstrumentationTestCase was too heavyweight and caused flaky
test. It was also indicative of a flaw in the original design that
ActionBar couldn't be mocked out easily.
Refactor the code so that:
1) getActionBar() is no longer needed
2) Respect the invariant that all access to the actionBar goes through the
ActionBarController (see the changes in ListsFragment) so that any change to
the ActionBar's hide offset can be tracked appropriately.
Bug: 17487016
Change-Id: I935b683ddb301ca5d3952889af1381bdbdcc97d3
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index aacf208..1c93350 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -1134,6 +1134,11 @@
return mActionBarController.isActionBarShowing();
}
+ @Override
+ public ActionBarController getActionBarController() {
+ return mActionBarController;
+ }
+
public boolean isDialpadShown() {
return mIsDialpadShown;
}
@@ -1144,13 +1149,13 @@
}
@Override
- public int getActionBarHeight() {
- return mActionBarHeight;
+ public void setActionBarHideOffset(int offset) {
+ getActionBar().setHideOffset(offset);
}
@Override
- public void setActionBarHideOffset(int hideOffset) {
- mActionBarController.setHideOffset(hideOffset);
+ public int getActionBarHeight() {
+ return mActionBarHeight;
}
/**
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
index de501f4..8e2500a 100644
--- a/src/com/android/dialer/list/ListsFragment.java
+++ b/src/com/android/dialer/list/ListsFragment.java
@@ -30,6 +30,7 @@
import com.android.dialer.calllog.ContactInfoHelper;
import com.android.dialer.list.ShortcutCardsAdapter.SwipeableShortcutCard;
import com.android.dialer.util.DialerUtils;
+import com.android.dialer.widget.ActionBarController;
import com.android.dialer.widget.OverlappingPaneLayout;
import com.android.dialer.widget.OverlappingPaneLayout.PanelSlideCallbacks;
import com.android.dialerbind.ObjectFactory;
@@ -68,8 +69,7 @@
public interface HostInterface {
public void showCallHistory();
- public int getActionBarHeight();
- public void setActionBarHideOffset(int offset);
+ public ActionBarController getActionBarController();
}
private ActionBar mActionBar;
@@ -124,8 +124,9 @@
final int availableActionBarHeight =
Math.min(mActionBar.getHeight(), topPaneHeight);
- ((HostInterface) getActivity()).setActionBarHideOffset(
- mActionBar.getHeight() - availableActionBarHeight);
+ final ActionBarController controller =
+ ((HostInterface) getActivity()).getActionBarController();
+ controller.setHideOffset(mActionBar.getHeight() - availableActionBarHeight);
if (!mActionBar.isShowing()) {
mActionBar.show();
@@ -407,7 +408,7 @@
paneLayout.openPane();
paneLayout.setPanelSlideCallbacks(mPanelSlideCallbacks);
paneLayout.setIntermediatePinnedOffset(
- ((HostInterface) getActivity()).getActionBarHeight());
+ ((HostInterface) getActivity()).getActionBarController().getActionBarHeight());
LayoutTransition transition = paneLayout.getLayoutTransition();
// Turns on animations for all types of layout changes so that they occur for
diff --git a/src/com/android/dialer/widget/ActionBarController.java b/src/com/android/dialer/widget/ActionBarController.java
index 265c03f..b9923d1 100644
--- a/src/com/android/dialer/widget/ActionBarController.java
+++ b/src/com/android/dialer/widget/ActionBarController.java
@@ -46,7 +46,8 @@
public boolean hasSearchQuery();
public boolean shouldShowActionBar();
public int getActionBarHeight();
- public ActionBar getActionBar();
+ public int getActionBarHideOffset();
+ public void setActionBarHideOffset(int offset);
}
public ActionBarController(ActivityUi activityUi, SearchEditTextLayout searchBox) {
@@ -166,14 +167,18 @@
public void setHideOffset(int offset) {
mIsActionBarSlidUp = offset >= mActivityUi.getActionBarHeight();
- mActivityUi.getActionBar().setHideOffset(offset);
+ mActivityUi.setActionBarHideOffset(offset);
}
/**
* @return The offset the action bar is being translated upwards by
*/
public int getHideOffset() {
- return mActivityUi.getActionBar().getHideOffset();
+ return mActivityUi.getActionBarHideOffset();
+ }
+
+ public int getActionBarHeight() {
+ return mActivityUi.getActionBarHeight();
}
/**