summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Lee <anwlee@google.com>2014-05-13 13:21:16 -0700
committerAndrew Lee <anwlee@google.com>2014-05-13 14:14:57 -0700
commita73e189f57d70e81e6c5150d10032dae29846fd7 (patch)
tree724354b229d355c8594a3e991197ab643b481bb5
parent7ff97a0c24daa15738d26c16367e122dfa6f7591 (diff)
Use one ImageButton for the floating action button.
This means that the touch feedback transition can continue to propagate, even while we're switching the icons. Change-Id: Ia0c4e7bb4556c84cabccbda5f4c5861e25e2928f
-rw-r--r--res/layout/dialtacts_activity.xml18
-rw-r--r--src/com/android/dialer/DialtactsActivity.java81
-rw-r--r--src/com/android/dialer/dialpad/DialpadFragment.java26
3 files changed, 50 insertions, 75 deletions
diff --git a/res/layout/dialtacts_activity.xml b/res/layout/dialtacts_activity.xml
index 595eae114..e0049b5e4 100644
--- a/res/layout/dialtacts_activity.xml
+++ b/res/layout/dialtacts_activity.xml
@@ -79,28 +79,22 @@
</LinearLayout>
</com.android.dialer.list.RemoveView >
<FrameLayout
- android:layout_height="@dimen/floating_action_button_height"
+ android:id="@+id/floating_action_button_container"
android:layout_width="@dimen/floating_action_button_width"
+ android:layout_height="@dimen/floating_action_button_height"
android:layout_marginRight="@dimen/floating_action_button_margin_right"
android:layout_marginBottom="@dimen/floating_action_button_margin_bottom"
- android:id="@+id/floating_action_button"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true">
+
<ImageButton
- android:id="@+id/dialpad_button"
- android:background="@drawable/floating_action_button"
+ android:id="@+id/floating_action_button"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:background="@drawable/floating_action_button"
android:contentDescription="@string/action_menu_dialpad_button"
android:src="@drawable/fab_ic_dial"/>
- <ImageButton
- android:id="@+id/dial_button"
- android:background="@drawable/floating_action_button"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:contentDescription="@string/description_dial_button"
- android:src="@drawable/fab_ic_call"
- android:visibility="gone" />
+
</FrameLayout>
<!-- Host container for the contact tile drag shadow -->
<FrameLayout
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 7f9200eb4..a90f0c8d3 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -53,6 +53,7 @@ import android.view.animation.Interpolator;
import android.view.inputmethod.InputMethodManager;
import android.widget.AbsListView.OnScrollListener;
import android.widget.EditText;
+import android.widget.ImageButton;
import android.widget.PopupMenu;
import android.widget.RelativeLayout;
import android.widget.Toast;
@@ -152,9 +153,8 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
*/
private ListsFragment mListsFragment;
- private View mFloatingActionButton;
- private View mDialpadButton;
- private View mDialButton;
+ private View mFloatingActionButtonContainer;
+ private ImageButton mFloatingActionButton;
private View mFragmentsFrame;
@@ -162,6 +162,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
private boolean mInDialpadSearch;
private boolean mInRegularSearch;
private boolean mClearSearchOnPause;
+ private boolean isDialpadShown;
/**
* The position of the currently selected tab in the attached {@link ListsFragment}.
@@ -375,13 +376,11 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
mFragmentsFrame = findViewById(R.id.dialtacts_frame);
- mFloatingActionButton = findViewById(R.id.floating_action_button);
- ViewUtil.setupFloatingActionButton(mFloatingActionButton, getResources());
+ mFloatingActionButtonContainer = findViewById(R.id.floating_action_button_container);
+ ViewUtil.setupFloatingActionButton(mFloatingActionButtonContainer, getResources());
- mDialButton = findViewById(R.id.dial_button);
- mDialButton.setOnClickListener(this);
- mDialpadButton = findViewById(R.id.dialpad_button);
- mDialpadButton.setOnClickListener(this);
+ mFloatingActionButton = (ImageButton) findViewById(R.id.floating_action_button);
+ mFloatingActionButton.setOnClickListener(this);
mRemoveViewContainer = findViewById(R.id.remove_view_container);
@@ -460,17 +459,14 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
@Override
public void onClick(View view) {
switch (view.getId()) {
- case R.id.dialpad_button:
- // Reset the boolean flag that tracks whether the dialpad was up because
- // we were in call. Regardless of whether it was true before, we want to
- // show the dialpad because the user has explicitly clicked the dialpad
- // button.
- mInCallDialpadUp = false;
- showDialpadFragment(true);
- break;
- case R.id.dial_button:
- // Dial button was pressed; tell the Dialpad fragment
- mDialpadFragment.dialButtonPressed();
+ case R.id.floating_action_button:
+ if (!isDialpadShown) {
+ mInCallDialpadUp = false;
+ showDialpadFragment(true);
+ } else {
+ // Dial button was pressed; tell the Dialpad fragment
+ mDialpadFragment.dialButtonPressed();
+ }
break;
case R.id.search_close_button:
// Clear the search field
@@ -534,15 +530,15 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
@Override
public boolean onLongClick(View view) {
switch (view.getId()) {
- case R.id.dial_button: {
- // Dial button was pressed; tell the Dialpad fragment
- mDialpadFragment.dialButtonPressed();
- return true; // Consume the event
- }
- default: {
+ case R.id.floating_action_button:
+ if (isDialpadShown) {
+ // Dial button was pressed; tell the Dialpad fragment
+ mDialpadFragment.dialButtonPressed();
+ return true; // Consume the event
+ }
+ default:
Log.wtf(TAG, "Unexpected onClick event from " + view);
break;
- }
}
return false;
}
@@ -612,8 +608,10 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
* Callback from child DialpadFragment when the dialpad is shown.
*/
public void onDialpadShown() {
- mDialButton.setVisibility(View.VISIBLE);
- mDialpadButton.setVisibility(View.GONE);
+ isDialpadShown = true;
+ mFloatingActionButton.setImageResource(R.drawable.fab_ic_call);
+ mFloatingActionButton.setContentDescription(
+ getResources().getString(R.string.description_dial_button));
SearchFragment fragment = null;
if (mInDialpadSearch) {
@@ -639,8 +637,10 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
* Callback from child DialpadFragment when the dialpad is hidden.
*/
public void onDialpadHidden() {
- mDialButton.setVisibility(View.GONE);
- mDialpadButton.setVisibility(View.VISIBLE);
+ isDialpadShown = false;
+ mFloatingActionButton.setImageResource(R.drawable.fab_ic_dial);
+ mFloatingActionButton.setContentDescription(
+ getResources().getString(R.string.action_menu_dialpad_button));
SearchFragment fragment = null;
if (mInDialpadSearch) {
@@ -907,15 +907,8 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
}
@Override
- public void setDialButtonEnabled(boolean enabled) {
- if (mDialButton != null) {
- mDialButton.setEnabled(enabled);
- }
- }
-
- @Override
- public void setDialButtonContainerVisible(boolean visible) {
- mFloatingActionButton.setVisibility(visible ? View.VISIBLE : View.GONE);
+ public void setFloatingActionButtonVisible(boolean visible) {
+ mFloatingActionButtonContainer.setVisibility(visible ? View.VISIBLE : View.GONE);
}
private boolean phoneIsInUse() {
@@ -1034,17 +1027,17 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
private void alignFloatingActionButtonRight() {
final RelativeLayout.LayoutParams params =
- (RelativeLayout.LayoutParams) mFloatingActionButton.getLayoutParams();
+ (RelativeLayout.LayoutParams) mFloatingActionButtonContainer.getLayoutParams();
params.removeRule(RelativeLayout.CENTER_HORIZONTAL);
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
- mFloatingActionButton.setLayoutParams(params);
+ mFloatingActionButtonContainer.setLayoutParams(params);
}
private void alignFloatingActionButtonMiddle() {
final RelativeLayout.LayoutParams params =
- (RelativeLayout.LayoutParams) mFloatingActionButton.getLayoutParams();
+ (RelativeLayout.LayoutParams) mFloatingActionButtonContainer.getLayoutParams();
params.removeRule(RelativeLayout.ALIGN_PARENT_RIGHT);
params.addRule(RelativeLayout.CENTER_HORIZONTAL);
- mFloatingActionButton.setLayoutParams(params);
+ mFloatingActionButtonContainer.setLayoutParams(params);
}
}
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 0ded9ab76..4557bd4b1 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -109,8 +109,7 @@ public class DialpadFragment extends Fragment
* TODO: Refactor the app so this interchange is a bit cleaner.
*/
public interface HostInterface {
- void setDialButtonEnabled(boolean enabled);
- void setDialButtonContainerVisible(boolean visible);
+ void setFloatingActionButtonVisible(boolean visible);
}
/**
@@ -318,7 +317,7 @@ public class DialpadFragment extends Fragment
if (mDialpadQueryListener != null) {
mDialpadQueryListener.onDialpadQueryChanged(mDigits.getText().toString());
}
- updateDialAndDeleteButtonEnabledState();
+ updateDeleteButtonEnabledState();
}
@Override
@@ -673,7 +672,7 @@ public class DialpadFragment extends Fragment
stopWatch.lap("hnt");
- updateDialAndDeleteButtonEnabledState();
+ updateDeleteButtonEnabledState();
stopWatch.lap("bes");
@@ -1218,7 +1217,7 @@ public class DialpadFragment extends Fragment
if (mDialpadView != null) {
mDialpadView.setVisibility(View.GONE);
}
- ((HostInterface) getActivity()).setDialButtonContainerVisible(false);
+ ((HostInterface) getActivity()).setFloatingActionButtonVisible(false);
mDialpadChooser.setVisibility(View.VISIBLE);
@@ -1235,7 +1234,7 @@ public class DialpadFragment extends Fragment
} else {
mDigits.setVisibility(View.VISIBLE);
}
- ((HostInterface) getActivity()).setDialButtonContainerVisible(true);
+ ((HostInterface) getActivity()).setFloatingActionButtonVisible(true);
mDialpadChooser.setVisibility(View.GONE);
}
}
@@ -1486,23 +1485,12 @@ public class DialpadFragment extends Fragment
/**
* Update the enabledness of the "Dial" and "Backspace" buttons if applicable.
*/
- private void updateDialAndDeleteButtonEnabledState() {
+ private void updateDeleteButtonEnabledState() {
if (getActivity() == null) {
return;
}
final boolean digitsNotEmpty = !isDigitsEmpty();
mDelete.setEnabled(digitsNotEmpty);
- // On CDMA phones, if we're already on a call, we *always* enable the Dial button (since
- // you can press it without entering any digits to send an empty flash.)
- if (phoneIsCdma() && phoneIsOffhook()) {
- ((HostInterface) getActivity()).setDialButtonEnabled(true);
- } else {
- // Common case: GSM, or CDMA but not on a call. Enable the Dial button if something
- // has been entered into the digits field, or if there is a last dialed number that
- // could be redialed.
- ((HostInterface) getActivity()).setDialButtonEnabled(
- digitsNotEmpty || !TextUtils.isEmpty(mLastNumberDialed));
- }
}
/**
@@ -1587,7 +1575,7 @@ public class DialpadFragment extends Fragment
// doing anything here.
if (getActivity() == null) return;
mLastNumberDialed = number;
- updateDialAndDeleteButtonEnabledState();
+ updateDeleteButtonEnabledState();
}
});
mCallLog.getLastOutgoingCall(lastCallArgs);