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

Commit abc0596e authored by Kyunglyul Hyun's avatar Kyunglyul Hyun Committed by Automerger Merge Worker
Browse files

Merge "Handle empty battery level" into tm-dev am: 95e5f0ab am: 9156d28a

parents fe488bc9 9156d28a
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -416,8 +416,11 @@ public class BatteryService extends ProfileService {
        return mAdapterService.getDatabase()
                .getProfileConnectionPolicy(device, BluetoothProfile.BATTERY);
    }

    void handleBatteryChanged(BluetoothDevice device, int batteryLevel) {
    /**
     * Called when the battery level of the device is notified.
     */
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    public void handleBatteryChanged(BluetoothDevice device, int batteryLevel) {
        mAdapterService.setBatteryLevel(device, batteryLevel);
    }

+6 −2
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ public class BatteryStateMachine extends StateMachine {
    WeakReference<BatteryService> mServiceRef;

    BluetoothGatt mBluetoothGatt;
    BluetoothGattCallback mGattCallback;
    GattCallback mGattCallback;
    final BluetoothDevice mDevice;

    BatteryStateMachine(BluetoothDevice device, BatteryService service, Looper looper) {
@@ -578,7 +578,11 @@ public class BatteryStateMachine extends StateMachine {
            }
        }

        private void updateBatteryLevel(byte[] value) {
        @VisibleForTesting
        void updateBatteryLevel(byte[] value) {
            if (value.length <= 0) {
                return;
            }
            int batteryLevel = value[0] & 0xFF;

            BatteryService service = mServiceRef.get();
+34 −5
Original line number Diff line number Diff line
@@ -20,14 +20,15 @@ import static android.bluetooth.BluetoothGatt.GATT_SUCCESS;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.after;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.reset;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
@@ -38,22 +39,20 @@ import android.os.Looper;

import androidx.test.InstrumentationRegistry;
import androidx.test.filters.LargeTest;
import androidx.test.filters.MediumTest;

import com.android.bluetooth.R;
import com.android.bluetooth.TestUtils;
import com.android.bluetooth.btservice.AdapterService;

import org.hamcrest.core.IsInstanceOf;
import org.junit.After;
import org.junit.Assert;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;

@@ -215,6 +214,36 @@ public class BatteryStateMachineTest {
                IsInstanceOf.instanceOf(BatteryStateMachine.Disconnected.class));
    }

    @Test
    public void testBatteryLevelChanged() {
        allowConnection(true);
        allowConnectGatt(true);

        // To create a callback
        mBatteryStateMachine.connectGatt();
        mBatteryStateMachine.mGattCallback.updateBatteryLevel(new byte[]{(byte)0x30});

        verify(mBatteryService, timeout(TIMEOUT_MS))
                .handleBatteryChanged(any(BluetoothDevice.class), eq(0x30));
    }

    @Test
    public void testEmptyBatteryLevelIgnored() {
        allowConnection(true);
        allowConnectGatt(true);

        // To create a callback
        mBatteryStateMachine.connectGatt();
        try {
            mBatteryStateMachine.mGattCallback.updateBatteryLevel(new byte[0]);
        } catch (Exception ex) {
            fail();
        }

        verify(mBatteryService, after(WAIT_MS).never())
                .handleBatteryChanged(any(BluetoothDevice.class), anyInt());
    }

    // It simulates GATT connection for testing.
    public class StubBatteryStateMachine extends BatteryStateMachine {
        boolean mShouldAllowGatt = true;