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

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

Merge "Fix settings crash"

parents bf4aa658 a6aae425
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);
    }