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

Commit 8235ed14 authored by Yi-Ling Chuang's avatar Yi-Ling Chuang
Browse files

Make the default value of flashlight availibility to true.

We read from SettingsProvider to decide whether flashlight slice is
available. However, when switching to the second user, FLASHLIGHT_AVAILABLE
will be null. The default was 0 which causes the slice returning null,
so we have to set it to 1 when there is a physical flash unit to be
consistent with system ui.

Fixes: 134734608
Test: robotest
Change-Id: I981461b1b66e6e273e13a9cbcba96e3ccf0aec68
parent 2ee1249b
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import androidx.slice.builders.ListBuilder;
import androidx.slice.builders.ListBuilder.RowBuilder;
import androidx.slice.builders.SliceAction;

import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.slices.CustomSliceRegistry;
@@ -131,10 +132,19 @@ public class FlashlightSlice implements CustomSliceable {
        return null;
    }


    private static boolean isFlashlightAvailable(Context context) {
        return Settings.Secure.getInt(
                context.getContentResolver(), Secure.FLASHLIGHT_AVAILABLE, 0) == 1;
    @VisibleForTesting
    static boolean isFlashlightAvailable(Context context) {
        int defaultAvailability = 0;
        try {
            // check if there is a flash unit
            if (getCameraId(context) != null) {
                defaultAvailability = 1;
            }
        } catch (CameraAccessException e) {
            Log.e(TAG, "Error getting camera id.", e);
        }
        return Secure.getInt(context.getContentResolver(),
                Secure.FLASHLIGHT_AVAILABLE, defaultAvailability) == 1;
    }

    private static boolean isFlashlightEnabled(Context context) {
+27 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ package com.android.settings.flashlight;
import static com.google.common.truth.Truth.assertThat;

import android.content.Context;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
import android.provider.Settings;

import androidx.slice.Slice;
@@ -35,6 +37,11 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows;
import org.robolectric.annotation.Config;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowCameraCharacteristics;
import org.robolectric.shadows.ShadowCameraManager;

import java.util.List;

@@ -42,10 +49,12 @@ import java.util.List;
public class FlashlightSliceTest {

    private Context mContext;
    private ShadowCameraManager mShadowCameraManager;

    @Before
    public void setUp() {
        mContext = RuntimeEnvironment.application;
        mShadowCameraManager = Shadows.shadowOf(mContext.getSystemService(CameraManager.class));

        // Set-up specs for SliceMetadata.
        SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
@@ -64,4 +73,22 @@ public class FlashlightSliceTest {
        final List<SliceAction> toggles = metadata.getToggles();
        assertThat(toggles).hasSize(1);
    }

    @Test
    public void isFlashlightAvailable_nullSecureAttr_noFlashUnit_returnFalse() {
        assertThat(FlashlightSlice.isFlashlightAvailable(mContext)).isFalse();
    }

    @Test
    public void isFlashlightAvailable_nullSecureAttr_hasFlashUnit_returnTrue() {
        final CameraCharacteristics characteristics =
                ShadowCameraCharacteristics.newCameraCharacteristics();
        final ShadowCameraCharacteristics shadowCharacteristics = Shadow.extract(characteristics);
        shadowCharacteristics.set(CameraCharacteristics.FLASH_INFO_AVAILABLE, true);
        shadowCharacteristics
                .set(CameraCharacteristics.LENS_FACING, CameraCharacteristics.LENS_FACING_BACK);
        mShadowCameraManager.addCamera("camera_id", characteristics);

        assertThat(FlashlightSlice.isFlashlightAvailable(mContext)).isTrue();
    }
}