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

Commit 50edf675 authored by Ravneet Dhanjal's avatar Ravneet Dhanjal Committed by Android (Google) Code Review
Browse files

Merge "Add camera extension fallback toggle" into main

parents f7e54aab 1a56189e
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -12004,6 +12004,11 @@
    <!-- Keywords for the media controls setting [CHAR LIMIT=NONE]-->
    <string name="keywords_media_controls">media</string>
    <!-- Title of toggle to enable or disable the media resumption on lockscreen [CHAR LIMIT=NONE]-->
    <string name="camera_extensions_fallback_title">Allow camera software extensions</string>
    <!-- Description of toggle to enable or disable the media resumption on lockscreen [CHAR LIMIT=NONE]-->
    <string name="camera_extensions_fallback_description">Enables the default software implementation of advanced camera features, such as Eyes Free videography.</string>
    <!-- Summary for see all preference when bluetooth is disable [CHAR LIMIT=none]-->
    <string name="connected_device_see_all_summary">Bluetooth will turn on</string>
+8 −0
Original line number Diff line number Diff line
@@ -93,6 +93,14 @@
            settings:controller=
                "com.android.settings.sound.MediaControlsLockScreenPreferenceController" />

        <!-- Allow software fallback for camera extensions -->
        <SwitchPreference
            android:key="privacy_camera_extensions_fallback"
            android:title="@string/camera_extensions_fallback_title"
            android:summary="@string/camera_extensions_fallback_description"
            settings:controller=
                "com.android.settings.privacy.CameraExtensionsFallbackPreferenceController" />

        <!-- Content Capture -->
        <!-- NOTE: content capture has a different preference, depending whether or not the
             ContentCaptureService implementations defines a custom settings activitiy on its manifest.
+64 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.privacy;

import static android.provider.Settings.Secure.CAMERA_EXTENSIONS_FALLBACK;

import android.content.Context;
import android.provider.Settings;

import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;

/**
 * Toggle for camera extensions software fallback
 */
public class CameraExtensionsFallbackPreferenceController extends TogglePreferenceController {
    public CameraExtensionsFallbackPreferenceController(Context context, String key) {
        super(context, key);
    }

    @Override
    public boolean isChecked() {
        int val = Settings.Secure.getInt(mContext.getContentResolver(),
                CAMERA_EXTENSIONS_FALLBACK, 1);
        return val == 1;
    }

    @Override
    public boolean setChecked(boolean isChecked) {
        int val = isChecked ? 1 : 0;
        return Settings.Secure.putInt(mContext.getContentResolver(),
                CAMERA_EXTENSIONS_FALLBACK, val);
    }

    @Override
    public int getAvailabilityStatus() {
        return AVAILABLE;
    }

    @Override
    public boolean isSliceable() {
        return false;
    }

    @Override
    public int getSliceHighlightMenuRes() {
        // not needed since it's not sliceable
        return NO_RES;
    }
}
+91 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.privacy;

import static com.android.settings.core.BasePreferenceController.AVAILABLE;

import static com.google.common.truth.Truth.assertThat;

import android.content.ContentResolver;
import android.content.Context;
import android.provider.Settings;

import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;

import com.android.settings.privacy.CameraExtensionsFallbackPreferenceController;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4.class)
public class CameraExtensionsFallbackPreferenceControllerTest {

    private static final String KEY = "camera_extensions_fallback";
    private final Context mContext = ApplicationProvider.getApplicationContext();

    private int mOriginalPreference;
    private ContentResolver mContentResolver;
    private CameraExtensionsFallbackPreferenceController mController;

    @Before
    public void setUp() {
        mContentResolver = mContext.getContentResolver();
        mOriginalPreference = Settings.Secure.getInt(mContentResolver,
                Settings.Secure.CAMERA_EXTENSIONS_FALLBACK, 1);
        mController = new CameraExtensionsFallbackPreferenceController(mContext, KEY);
    }

    @After
    public void tearDown() {
        Settings.Secure.putInt(mContentResolver, Settings.Secure.CAMERA_EXTENSIONS_FALLBACK,
                mOriginalPreference);
    }

    @Test
    public void getAvailability_returnAvailable() {
        assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
    }

    @Test
    public void setChecked_disable_shouldTurnOff() {
        Settings.Secure.putInt(mContentResolver,
                Settings.Secure.CAMERA_EXTENSIONS_FALLBACK, 1);

        assertThat(mController.isChecked()).isTrue();

        mController.setChecked(false);

        assertThat(Settings.Secure.getInt(mContentResolver,
                Settings.Secure.CAMERA_EXTENSIONS_FALLBACK, -1)).isEqualTo(0);
    }

    @Test
    public void setChecked_enable_shouldTurnOn() {
        Settings.Secure.putInt(mContentResolver,
                Settings.Secure.CAMERA_EXTENSIONS_FALLBACK, 0);

        assertThat(mController.isChecked()).isFalse();

        mController.setChecked(true);

        assertThat(Settings.Secure.getInt(mContentResolver,
                Settings.Secure.CAMERA_EXTENSIONS_FALLBACK, -1)).isEqualTo(1);
    }
}