Move device detail edit button from menu to header

Move the edit button on Bluetooth device detail,
From action bar menu to header.
Use EntityHeaderController to add and control,
Rename those method because we use them on
more than one place now.

Change-Id: I3afad6baeab80895c109603e2ab13428582a4dd8
Fixes: 76206922
Test: make RunSettingsRoboTests
This commit is contained in:
HJ ChangLiao
2018-04-12 13:14:57 +08:00
parent ccec4e830c
commit f3be34e01b
7 changed files with 68 additions and 85 deletions

View File

@@ -17,12 +17,19 @@
package com.android.settings.bluetooth;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.graphics.drawable.Drawable;
import android.view.View;
import com.android.settings.R;
import com.android.settings.applications.LayoutPreference;
@@ -39,6 +46,7 @@ import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.ArgumentCaptor;
import org.mockito.InOrder;
import org.mockito.Mock;
import org.robolectric.annotation.Config;
@@ -97,6 +105,10 @@ public class BluetoothDetailsHeaderControllerTest extends BluetoothDetailsContro
verify(mHeaderController).setIconContentDescription(any(String.class));
verify(mHeaderController).setSummary(any(String.class));
verify(mHeaderController).setSecondSummary(any(String.class));
verify(mHeaderController).setEditListener(any(View.OnClickListener.class));
verify(mHeaderController).setButtonActions(
EntityHeaderController.ActionType.ACTION_EDIT_PREFERENCE,
EntityHeaderController.ActionType.ACTION_NONE);
verify(mHeaderController).done(mActivity, true);
}
@@ -119,4 +131,20 @@ public class BluetoothDetailsHeaderControllerTest extends BluetoothDetailsContro
inOrder.verify(mHeaderController)
.setSummary(mContext.getString(R.string.bluetooth_connecting));
}
@Test
public void invokeShowEditDeviceNameDialog_showDialog() {
showScreen(mController);
FragmentManager fragmentManager = mock(FragmentManager.class);
when(mFragment.getFragmentManager()).thenReturn(fragmentManager);
FragmentTransaction ft = mock(FragmentTransaction.class);
when(fragmentManager.beginTransaction()).thenReturn(ft);
ArgumentCaptor<Fragment> captor = ArgumentCaptor.forClass(Fragment.class);
mController.showEditDeviceNameDialog();
verify(ft).add(captor.capture(), eq(RemoteDeviceNameDialogFragment.TAG));
RemoteDeviceNameDialogFragment dialog = (RemoteDeviceNameDialogFragment) captor.getValue();
assertThat(dialog).isNotNull();
}
}

View File

@@ -18,22 +18,13 @@ package com.android.settings.bluetooth;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Context;
import android.os.Bundle;
import android.view.MenuInflater;
import android.view.MenuItem;
import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
@@ -43,15 +34,15 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.fakes.RoboMenu;
@RunWith(SettingsRobolectricTestRunner.class)
public class BluetoothDeviceDetailsFragmentTest {
private static final String TEST_ADDRESS = "55:66:77:88:99:AA";
private BluetoothDeviceDetailsFragment mFragment;
private Context mContext;
@@ -67,46 +58,21 @@ public class BluetoothDeviceDetailsFragmentTest {
mContext = spy(RuntimeEnvironment.application);
FakeFeatureFactory.setupForTest();
String deviceAddress = "55:66:77:88:99:AA";
mFragment = spy(BluetoothDeviceDetailsFragment.newInstance(deviceAddress));
mFragment = spy(BluetoothDeviceDetailsFragment.newInstance(TEST_ADDRESS));
doReturn(mLocalManager).when(mFragment).getLocalBluetoothManager(any());
doReturn(mCachedDevice).when(mFragment).getCachedDevice(any());
when(mCachedDevice.getAddress()).thenReturn(deviceAddress);
when(mCachedDevice.getAddress()).thenReturn(TEST_ADDRESS);
Bundle args = new Bundle();
args.putString(BluetoothDeviceDetailsFragment.KEY_DEVICE_ADDRESS, deviceAddress);
args.putString(BluetoothDeviceDetailsFragment.KEY_DEVICE_ADDRESS, TEST_ADDRESS);
mFragment.setArguments(args);
mFragment.onAttach(mContext);
}
@Test
public void renameControlGetsAdded() {
RoboMenu menu = new RoboMenu(mContext);
MenuInflater inflater = new MenuInflater(mContext);
mFragment.onCreateOptionsMenu(menu, inflater);
MenuItem item = menu.getItem(0);
assertThat(item.getTitle()).isEqualTo(mContext.getString(R.string.bluetooth_rename_button));
assertThat(item.getIcon()).isEqualTo(mContext.getDrawable(R.drawable.ic_mode_edit));
}
@Test
public void renameControlClicked() {
RoboMenu menu = new RoboMenu(mContext);
MenuInflater inflater = new MenuInflater(mContext);
mFragment.onCreateOptionsMenu(menu, inflater);
MenuItem item = menu.getItem(0);
assertThat(item.getItemId())
.isEqualTo(BluetoothDeviceDetailsFragment.EDIT_DEVICE_NAME_ITEM_ID);
FragmentManager fragmentManager = mock(FragmentManager.class);
when(mFragment.getFragmentManager()).thenReturn(fragmentManager);
FragmentTransaction ft = mock(FragmentTransaction.class);
when(fragmentManager.beginTransaction()).thenReturn(ft);
ArgumentCaptor<Fragment> captor = ArgumentCaptor.forClass(Fragment.class);
mFragment.onOptionsItemSelected(item);
verify(ft).add(captor.capture(), eq(RemoteDeviceNameDialogFragment.TAG));
RemoteDeviceNameDialogFragment dialog = (RemoteDeviceNameDialogFragment) captor.getValue();
assertThat(dialog).isNotNull();
public void verifyOnAttachResult() {
assertThat(mFragment.mDeviceAddress).isEqualTo(TEST_ADDRESS);
assertThat(mFragment.mManager).isEqualTo(mLocalManager);
assertThat(mFragment.mCachedDevice).isEqualTo(mCachedDevice);
}
}

View File

@@ -169,7 +169,7 @@ public class EntityHeaderControllerTest {
}
@Test
public void bindButton_hasEditRuleNameClickListener_shouldShowButton() {
public void bindButton_hasEditClickListener_shouldShowButton() {
final ResolveInfo info = new ResolveInfo();
info.activityInfo = new ActivityInfo();
info.activityInfo.packageName = "123";
@@ -179,13 +179,13 @@ public class EntityHeaderControllerTest {
when(mActivity.getApplicationContext()).thenReturn(mContext);
mController = EntityHeaderController.newInstance(mActivity, mFragment, view);
mController.setEditZenRuleNameListener(new View.OnClickListener() {
mController.setEditListener(new View.OnClickListener() {
public void onClick(View v) {
// do nothing
}
});
mController.setButtonActions(
EntityHeaderController.ActionType.ACTION_DND_RULE_PREFERENCE,
EntityHeaderController.ActionType.ACTION_EDIT_PREFERENCE,
EntityHeaderController.ActionType.ACTION_NONE);
mController.done(mActivity);
@@ -197,7 +197,7 @@ public class EntityHeaderControllerTest {
}
@Test
public void bindButton_noEditRuleNameClickListener_shouldNotShowButton() {
public void bindButton_noEditClickListener_shouldNotShowButton() {
final ResolveInfo info = new ResolveInfo();
info.activityInfo = new ActivityInfo();
info.activityInfo.packageName = "123";
@@ -207,7 +207,7 @@ public class EntityHeaderControllerTest {
mController = EntityHeaderController.newInstance(mActivity, mFragment, view);
mController.setButtonActions(
EntityHeaderController.ActionType.ACTION_DND_RULE_PREFERENCE,
EntityHeaderController.ActionType.ACTION_EDIT_PREFERENCE,
EntityHeaderController.ActionType.ACTION_NONE);
mController.done(mActivity);