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

Commit 19af143f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix settings crash" into rvc-qpr-dev

parents 2b52c56e 194dd88e
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -96,7 +96,6 @@ public final class BluetoothDevicePreference extends GearPreference implements
        }

        mCachedDevice = cachedDevice;
        mCachedDevice.registerCallback(this);
        mCurrentTime = System.currentTimeMillis();
        mType = type;

@@ -127,13 +126,24 @@ public final class BluetoothDevicePreference extends GearPreference implements
    @Override
    protected void onPrepareForRemoval() {
        super.onPrepareForRemoval();
        mCachedDevice.unregisterCallback(this);
        if (mDisconnectDialog != null) {
            mDisconnectDialog.dismiss();
            mDisconnectDialog = null;
        }
    }

    @Override
    public void onAttached() {
        super.onAttached();
        mCachedDevice.registerCallback(this);
    }

    @Override
    public void onDetached() {
        super.onDetached();
        mCachedDevice.unregisterCallback(this);
    }

    public CachedBluetoothDevice getBluetoothDevice() {
        return mCachedDevice;
    }
+45 −25
Original line number Diff line number Diff line
@@ -51,14 +51,15 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);

    private static final int MAX_DEVICE_NUM = 3;
    private static final int DOCK_DEVICE_INDEX = 9;
    private static final String KEY_SEE_ALL = "previously_connected_devices_see_all";

    private final List<Preference> mDevicesList = new ArrayList<>();
    private final List<Preference> mDockDevicesList = new ArrayList<>();

    private PreferenceGroup mPreferenceGroup;
    private BluetoothDeviceUpdater mBluetoothDeviceUpdater;
    private DockUpdater mSavedDockUpdater;
    private int mPreferenceSize;
    private BluetoothAdapter mBluetoothAdapter;

    @VisibleForTesting
@@ -126,33 +127,38 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc

    @Override
    public void onDeviceAdded(Preference preference) {
        mPreferenceSize++;
        final List<BluetoothDevice> bluetoothDevices =
                mBluetoothAdapter.getMostRecentlyConnectedDevices();
        final int index = bluetoothDevices.indexOf(((BluetoothDevicePreference) preference)
                .getBluetoothDevice().getDevice());
        final int index = preference instanceof BluetoothDevicePreference
                ? bluetoothDevices.indexOf(((BluetoothDevicePreference) preference)
                .getBluetoothDevice().getDevice()) : DOCK_DEVICE_INDEX;
        if (DEBUG) {
            Log.d(TAG, "onDeviceAdded() " + preference.getTitle() + ", index of : " + index);
            for (BluetoothDevice device : bluetoothDevices) {
                Log.d(TAG, "onDeviceAdded() most recently device : " + device.getName());
            }
        }
        if (mPreferenceSize <= MAX_DEVICE_NUM) {
            addPreference(mPreferenceSize, index, preference);
        } else {
            addPreference(MAX_DEVICE_NUM, index, preference);
        }
        addPreference(index, preference);
        updatePreferenceVisibility();
    }

    private void addPreference(int size, int index, Preference preference) {
    private void addPreference(int index, Preference preference) {
        if (preference instanceof BluetoothDevicePreference) {
            if (mDevicesList.size() >= index) {
                mDevicesList.add(index, preference);
            } else {
                mDevicesList.add(preference);
            }
        } else {
            mDockDevicesList.add(preference);
        }
        addPreference();
    }

    private void addPreference() {
        mPreferenceGroup.removeAll();
        mPreferenceGroup.addPreference(mSeeAllPreference);
        final int size = getDeviceListSize();
        for (int i = 0; i < size; i++) {
            if (DEBUG) {
                Log.d(TAG, "addPreference() add device : " + mDevicesList.get(i).getTitle());
@@ -160,23 +166,37 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc
            mDevicesList.get(i).setOrder(i);
            mPreferenceGroup.addPreference(mDevicesList.get(i));
        }
        if (mDockDevicesList.size() > 0) {
            for (int i = 0; i < getDockDeviceListSize(MAX_DEVICE_NUM - size); i++) {
                if (DEBUG) {
                    Log.d(TAG, "addPreference() add dock device : "
                            + mDockDevicesList.get(i).getTitle());
                }
                mDockDevicesList.get(i).setOrder(DOCK_DEVICE_INDEX);
                mPreferenceGroup.addPreference(mDockDevicesList.get(i));
            }
        }
    }

    private int getDeviceListSize() {
        return mDevicesList.size() >= MAX_DEVICE_NUM
                ? MAX_DEVICE_NUM : mDevicesList.size();
    }

    private int getDockDeviceListSize(int availableSize) {
        return mDockDevicesList.size() >= availableSize
                ? availableSize : mDockDevicesList.size();
    }

    @Override
    public void onDeviceRemoved(Preference preference) {
        mPreferenceSize--;
        if (preference instanceof BluetoothDevicePreference) {
            mDevicesList.remove(preference);
        mPreferenceGroup.removeAll();
        mPreferenceGroup.addPreference(mSeeAllPreference);
        final int size = mDevicesList.size() >= MAX_DEVICE_NUM
                ? MAX_DEVICE_NUM : mDevicesList.size();
        for (int i = 0; i < size; i++) {
            if (DEBUG) {
                Log.d(TAG, "onDeviceRemoved() add device : " + mDevicesList.get(i).getTitle());
            }
            mDevicesList.get(i).setOrder(i);
            mPreferenceGroup.addPreference(mDevicesList.get(i));
        } else {
            mDockDevicesList.remove(preference);
        }

        addPreference();
        updatePreferenceVisibility();
    }

+18 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import com.android.settings.bluetooth.BluetoothDeviceUpdater;
import com.android.settings.connecteddevice.dock.DockUpdater;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
import com.android.settings.widget.SingleTargetGearPreference;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;

import org.junit.Before;
@@ -187,6 +188,16 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
        assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(2);
    }

    @Test
    public void onDeviceAdded_addDockDevicePreference_displayIt() {
        final SingleTargetGearPreference dockPreference = new SingleTargetGearPreference(
                mContext, null /* AttributeSet */);

        mPreConnectedDeviceController.onDeviceAdded(dockPreference);

        assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(2);
    }

    @Test
    public void onDeviceAdded_addFourDevicePreference_onlyDisplayThree() {
        final BluetoothDevicePreference preference1 = new BluetoothDevicePreference(
@@ -197,11 +208,14 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
                mContext, mCachedDevice3, true, BluetoothDevicePreference.SortType.TYPE_NO_SORT);
        final BluetoothDevicePreference preference4 = new BluetoothDevicePreference(
                mContext, mCachedDevice4, true, BluetoothDevicePreference.SortType.TYPE_NO_SORT);
        final SingleTargetGearPreference dockPreference = new SingleTargetGearPreference(
                mContext, null /* AttributeSet */);

        mPreConnectedDeviceController.onDeviceAdded(preference1);
        mPreConnectedDeviceController.onDeviceAdded(preference2);
        mPreConnectedDeviceController.onDeviceAdded(preference3);
        mPreConnectedDeviceController.onDeviceAdded(preference4);
        mPreConnectedDeviceController.onDeviceAdded(dockPreference);

        // 3 BluetoothDevicePreference and 1 see all preference
        assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(4);
@@ -211,9 +225,13 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
    public void onDeviceRemoved_removeLastDevice_showSeeAllPreference() {
        final BluetoothDevicePreference preference1 = new BluetoothDevicePreference(
                mContext, mCachedDevice1, true, BluetoothDevicePreference.SortType.TYPE_NO_SORT);
        final SingleTargetGearPreference dockPreference = new SingleTargetGearPreference(
                mContext, null /* AttributeSet */);
        mPreferenceGroup.addPreference(preference1);
        mPreferenceGroup.addPreference(dockPreference);

        mPreConnectedDeviceController.onDeviceRemoved(preference1);
        mPreConnectedDeviceController.onDeviceRemoved(dockPreference);

        assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(1);
    }