Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c37973f0 authored by hjchangliao's avatar hjchangliao
Browse files

Move edit icon from header to action bar

Move edit icon in bluetooth detail page,
from header back to action bar.

Change-Id: I6afd7c611fe4db8c6c27921b5da316d8a1a000db
Fixes: 76206922
Test: make RunSettingsRoboTests
parent 8b9529e5
Loading
Loading
Loading
Loading
+0 −10
Original line number Diff line number Diff line
@@ -73,16 +73,6 @@ public class BluetoothDetailsHeaderController extends BluetoothDetailsController
        mHeaderController.setIcon(pair.first);
        mHeaderController.setIconContentDescription(pair.second);
        mHeaderController.setSummary(summaryText);
        mHeaderController.setEditListener(v -> showEditDeviceNameDialog());
        mHeaderController.setButtonActions(
                EntityHeaderController.ActionType.ACTION_EDIT_PREFERENCE,
                EntityHeaderController.ActionType.ACTION_NONE);
    }

    @VisibleForTesting
    void showEditDeviceNameDialog() {
        RemoteDeviceNameDialogFragment.newInstance(mCachedDevice).show(
                mFragment.getFragmentManager(), RemoteDeviceNameDialogFragment.TAG);
    }

    @Override
+24 −0
Original line number Diff line number Diff line
@@ -24,6 +24,9 @@ import android.os.Bundle;
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;
@@ -43,6 +46,9 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
    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.
@@ -126,6 +132,24 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
        return R.xml.bluetooth_device_details_fragment;
    }

    @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<>();
+0 −21
Original line number Diff line number Diff line
@@ -44,7 +44,6 @@ 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.RobolectricTestRunner;
@@ -104,10 +103,6 @@ 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);
    }

@@ -130,20 +125,4 @@ 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();
    }
}
+46 −0
Original line number Diff line number Diff line
@@ -19,15 +19,24 @@ package com.android.settings.bluetooth;
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;
@@ -36,10 +45,12 @@ 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.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.fakes.RoboMenu;

@RunWith(RobolectricTestRunner.class)
public class BluetoothDeviceDetailsFragmentTest {
@@ -48,6 +59,9 @@ 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;
@@ -67,11 +81,19 @@ public class BluetoothDeviceDetailsFragmentTest {
        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
@@ -80,4 +102,28 @@ public class BluetoothDeviceDetailsFragmentTest {
        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();
    }
}