import android.util.FeatureFlagUtils;
import androidx.annotation.VisibleForTesting;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
public static final String KEY_DEVICE_ADDRESS = "device_address";
private static final String TAG = "BTDeviceDetailsFrg";
+ @VisibleForTesting
+ static int EDIT_DEVICE_NAME_ITEM_ID = Menu.FIRST;
+
/**
* An interface to let tests override the normal mechanism for looking up the
* CachedBluetoothDevice and LocalBluetoothManager, and substitute their own mocks instead.
}
@Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ MenuItem item = menu.add(0, EDIT_DEVICE_NAME_ITEM_ID, 0, R.string.bluetooth_rename_button);
+ item.setIcon(R.drawable.ic_mode_edit);
+ item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+ super.onCreateOptionsMenu(menu, inflater);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem menuItem) {
+ if (menuItem.getItemId() == EDIT_DEVICE_NAME_ITEM_ID) {
+ RemoteDeviceNameDialogFragment.newInstance(mCachedDevice).show(
+ getFragmentManager(), RemoteDeviceNameDialogFragment.TAG);
+ return true;
+ }
+ return super.onOptionsItemSelected(menuItem);
+ }
+
+ @Override
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
ArrayList<AbstractPreferenceController> controllers = new ArrayList<>();
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.RobolectricTestRunner;
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);
}
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();
- }
}
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.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.content.Context;
import android.os.Bundle;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
import androidx.preference.PreferenceScreen;
+import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
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.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.fakes.RoboMenu;
@RunWith(RobolectricTestRunner.class)
public class BluetoothDeviceDetailsFragmentTest {
private BluetoothDeviceDetailsFragment mFragment;
private Context mContext;
+ private RoboMenu mMenu;
+ private MenuInflater mInflater;
+ private FragmentTransaction mFragmentTransaction;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private CachedBluetoothDevice mCachedDevice;
doReturn(mCachedDevice).when(mFragment).getCachedDevice(any());
doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen();
+ FragmentManager fragmentManager = mock(FragmentManager.class);
+ when(mFragment.getFragmentManager()).thenReturn(fragmentManager);
+ mFragmentTransaction = mock(FragmentTransaction.class);
+ when(fragmentManager.beginTransaction()).thenReturn(mFragmentTransaction);
+
when(mCachedDevice.getAddress()).thenReturn(TEST_ADDRESS);
Bundle args = new Bundle();
args.putString(BluetoothDeviceDetailsFragment.KEY_DEVICE_ADDRESS, TEST_ADDRESS);
mFragment.setArguments(args);
mFragment.onAttach(mContext);
+
+ mMenu = new RoboMenu(mContext);
+ mInflater = new MenuInflater(mContext);
}
@Test
assertThat(mFragment.mManager).isEqualTo(mLocalManager);
assertThat(mFragment.mCachedDevice).isEqualTo(mCachedDevice);
}
+
+ @Test
+ public void getTitle_displayEditTitle() {
+ mFragment.onCreateOptionsMenu(mMenu, mInflater);
+
+ final MenuItem item = mMenu.getItem(0);
+
+ assertThat(item.getTitle()).isEqualTo(mContext.getString(R.string.bluetooth_rename_button));
+ }
+
+ @Test
+ public void editMenu_clicked_showDialog() {
+ mFragment.onCreateOptionsMenu(mMenu, mInflater);
+ final MenuItem item = mMenu.getItem(0);
+ ArgumentCaptor<Fragment> captor = ArgumentCaptor.forClass(Fragment.class);
+
+ mFragment.onOptionsItemSelected(item);
+
+ assertThat(item.getItemId())
+ .isEqualTo(BluetoothDeviceDetailsFragment.EDIT_DEVICE_NAME_ITEM_ID);
+ verify(mFragmentTransaction).add(captor.capture(), eq(RemoteDeviceNameDialogFragment.TAG));
+ RemoteDeviceNameDialogFragment dialog = (RemoteDeviceNameDialogFragment) captor.getValue();
+ assertThat(dialog).isNotNull();
+ }
}