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

Commit b890ed15 authored by Kevin Maurin's avatar Kevin Maurin Committed by Automerger Merge Worker
Browse files

Merge "Display "Android Auto" in Connected Devices summary text." into rvc-dev...

Merge "Display "Android Auto" in Connected Devices summary text." into rvc-dev am: 56cefaf3 am: 637a3ba9

Change-Id: Ie6e40209428eb4efb0c631e01484629b87a278bb
parents e2db16a4 637a3ba9
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -7488,6 +7488,14 @@
    <string name="connected_devices_dashboard_no_driving_mode_summary">Bluetooth, NFC</string>
    <!-- Summary for Connected devices settings, explaning a few important settings under it [CHAR LIMIT=NONE]-->
    <string name="connected_devices_dashboard_no_driving_mode_no_nfc_summary">Bluetooth</string>
    <!--Summary for Connected devices settings, explaning a few important settings under it [CHAR LIMIT=NONE]-->
    <string name="connected_devices_dashboard_android_auto_summary">Bluetooth, Android Auto, driving mode, NFC</string><!--
    Summary for Connected devices settings, explaning a few important settings under it [CHAR LIMIT=NONE]-->
    <string name="connected_devices_dashboard_android_auto_no_nfc_summary">Bluetooth, Android Auto, driving mode</string>
    <!-- Summary for Connected devices settings, explaning a few important settings under it [CHAR LIMIT=NONE]-->
    <string name="connected_devices_dashboard_android_auto_no_driving_mode_summary">Bluetooth, Android Auto, NFC</string>
    <!-- Summary for Connected devices settings, explaning a few important settings under it [CHAR LIMIT=NONE]-->
    <string name="connected_devices_dashboard_android_auto_no_nfc_no_driving_mode">Bluetooth, Android Auto</string>
    <!-- Summary for Tap & pay settings, explaning a few important settings under it [CHAR LIMIT=NONE]-->
    <string name="nfc_and_payment_settings_payment_off_nfc_off_summary">Unavailable because NFC is off</string>
    <!-- Summary for Tap & pay settings, explaning a few important settings under it [CHAR LIMIT=NONE]-->
+48 −13
Original line number Diff line number Diff line
@@ -15,7 +15,10 @@
 */
package com.android.settings.connecteddevice;

import static com.android.settingslib.drawer.TileUtils.IA_SETTINGS_ACTION;

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

import androidx.annotation.VisibleForTesting;
@@ -31,6 +34,7 @@ public class AdvancedConnectedDeviceController extends BasePreferenceController

    private static final String DRIVING_MODE_SETTINGS_ENABLED =
            "gearhead:driving_mode_settings_enabled";
    private static final String GEARHEAD_PACKAGE = "com.google.android.projection.gearhead";

    public AdvancedConnectedDeviceController(Context context, String preferenceKey) {
        super(context, preferenceKey);
@@ -55,7 +59,7 @@ public class AdvancedConnectedDeviceController extends BasePreferenceController
                new NfcPreferenceController(context, NfcPreferenceController.KEY_TOGGLE_NFC);

        return getConnectedDevicesSummaryResourceId(nfcPreferenceController,
                isDrivingModeAvailable(context));
                isDrivingModeAvailable(context), isAndroidAutoSettingAvailable(context));
    }

    @VisibleForTesting
@@ -64,11 +68,41 @@ public class AdvancedConnectedDeviceController extends BasePreferenceController
                getInt(context.getContentResolver(), DRIVING_MODE_SETTINGS_ENABLED, 0) == 1;
    }

    @VisibleForTesting
    static boolean isAndroidAutoSettingAvailable(Context context) {
        final Intent intent = new Intent(IA_SETTINGS_ACTION);
        intent.setPackage(GEARHEAD_PACKAGE);
        return intent.resolveActivity(context.getPackageManager()) != null;
    }

    @VisibleForTesting
    static int getConnectedDevicesSummaryResourceId(NfcPreferenceController
            nfcPreferenceController, boolean isDrivingModeAvailable) {
            nfcPreferenceController,
            boolean isDrivingModeAvailable,
            boolean isAndroidAutoAvailable) {
        final int resId;

        if (isAndroidAutoAvailable) {
            if (nfcPreferenceController.isAvailable()) {
                if (isDrivingModeAvailable) {
                    // NFC available, driving mode available
                    resId = R.string.connected_devices_dashboard_android_auto_summary;
                } else {
                    // NFC available, driving mode not available
                    resId =
                        R.string.connected_devices_dashboard_android_auto_no_driving_mode_summary;
                }
            } else {
                if (isDrivingModeAvailable) {
                    // NFC not available, driving mode available
                    resId = R.string.connected_devices_dashboard_android_auto_no_nfc_summary;
                } else {
                    // NFC not available, driving mode not available
                    resId =
                        R.string.connected_devices_dashboard_android_auto_no_nfc_no_driving_mode;
                }
            }
        } else {
            if (nfcPreferenceController.isAvailable()) {
                if (isDrivingModeAvailable) {
                    // NFC available, driving mode available
@@ -86,6 +120,7 @@ public class AdvancedConnectedDeviceController extends BasePreferenceController
                    resId = R.string.connected_devices_dashboard_no_driving_mode_no_nfc_summary;
                }
            }
        }

        return resId;
    }
+88 −6
Original line number Diff line number Diff line
@@ -23,9 +23,15 @@ import static org.mockito.Mockito.spy;

import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ResolveInfo;
import android.nfc.NfcAdapter;
import android.provider.Settings;

import androidx.test.core.content.pm.ApplicationInfoBuilder;

import com.android.settings.R;
import com.android.settings.nfc.NfcPreferenceController;

@@ -38,6 +44,7 @@ import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowNfcAdapter;
import org.robolectric.shadows.ShadowPackageManager;
import org.robolectric.util.ReflectionHelpers;

@RunWith(RobolectricTestRunner.class)
@@ -47,11 +54,13 @@ public class AdvancedConnectedDeviceControllerTest {
    private static final String KEY = "test_key";
    private static final String DRIVING_MODE_SETTINGS_ENABLED =
            "gearhead:driving_mode_settings_enabled";
    private static final String ANDROID_AUTO_PACKAGE = "com.google.android.projection.gearhead";

    private Context mContext;
    private NfcPreferenceController mNfcController;
    private ShadowNfcAdapter mShadowNfcAdapter;
    private ContentResolver mContentResolver;
    private ShadowPackageManager mShadowPackageManager;

    @Before
    public void setUp() {
@@ -62,6 +71,7 @@ public class AdvancedConnectedDeviceControllerTest {
        mNfcController = new NfcPreferenceController(mContext,
                NfcPreferenceController.KEY_TOGGLE_NFC);
        mShadowNfcAdapter = Shadows.shadowOf(NfcAdapter.getNfcAdapter(mContext));
        mShadowPackageManager = Shadows.shadowOf(mContext.getPackageManager());
    }

    @Test
@@ -76,14 +86,41 @@ public class AdvancedConnectedDeviceControllerTest {
    public void isDrivingModeAvailable_returnTrue() {
        Settings.System.putInt(mContentResolver, DRIVING_MODE_SETTINGS_ENABLED, 1);

        assertThat(AdvancedConnectedDeviceController.isDrivingModeAvailable(mContext)).isTrue();
        assertThat(
            AdvancedConnectedDeviceController.isDrivingModeAvailable(mContext)).isTrue();
    }

    @Test
    public void isDrivingModeAvailable_returnFalse() {
        Settings.System.putInt(mContentResolver, DRIVING_MODE_SETTINGS_ENABLED, 0);

        assertThat(AdvancedConnectedDeviceController.isDrivingModeAvailable(mContext)).isFalse();
        assertThat(
            AdvancedConnectedDeviceController.isDrivingModeAvailable(mContext)).isFalse();
    }

    @Test
    public void isAndroidAutoSettingAvailable_returnTrue() {
        final ApplicationInfo appInfo =
                ApplicationInfoBuilder.newBuilder().setPackageName(ANDROID_AUTO_PACKAGE).build();
        final ActivityInfo activityInfo = new ActivityInfo();
        activityInfo.packageName = ANDROID_AUTO_PACKAGE;
        activityInfo.name = ANDROID_AUTO_PACKAGE;
        activityInfo.applicationInfo = appInfo;
        final ResolveInfo resolveInfo = new ResolveInfo();
        resolveInfo.activityInfo = activityInfo;
        mShadowPackageManager.addResolveInfoForIntent(
                buildAndroidAutoSettingsIntent(),
                resolveInfo);

        assertThat(
            AdvancedConnectedDeviceController.isAndroidAutoSettingAvailable(mContext)).isTrue();
    }

    @Test
    public void isAndroidAutoSettingAvailable_returnFalse() {
        // No ResolveInfo for Android Auto, expect false.
        assertThat(
            AdvancedConnectedDeviceController.isAndroidAutoSettingAvailable(mContext)).isFalse();
    }

    @Test
@@ -91,7 +128,7 @@ public class AdvancedConnectedDeviceControllerTest {
        // NFC available, driving mode available
        mShadowNfcAdapter.setEnabled(true);
        assertThat(AdvancedConnectedDeviceController
                .getConnectedDevicesSummaryResourceId(mNfcController, true))
                .getConnectedDevicesSummaryResourceId(mNfcController, true, false))
                .isEqualTo(R.string.connected_devices_dashboard_summary);
    }

@@ -100,7 +137,7 @@ public class AdvancedConnectedDeviceControllerTest {
        // NFC is available, driving mode not available
        mShadowNfcAdapter.setEnabled(true);
        assertThat(AdvancedConnectedDeviceController
                .getConnectedDevicesSummaryResourceId(mNfcController, false))
                .getConnectedDevicesSummaryResourceId(mNfcController, false, false))
                .isEqualTo(R.string.connected_devices_dashboard_no_driving_mode_summary);
    }

@@ -109,7 +146,7 @@ public class AdvancedConnectedDeviceControllerTest {
        // NFC not available, driving mode available
        ReflectionHelpers.setField(mNfcController, "mNfcAdapter", null);
        assertThat(AdvancedConnectedDeviceController
                .getConnectedDevicesSummaryResourceId(mNfcController, true))
                .getConnectedDevicesSummaryResourceId(mNfcController, true, false))
                .isEqualTo(R.string.connected_devices_dashboard_no_nfc_summary);
    }

@@ -118,7 +155,52 @@ public class AdvancedConnectedDeviceControllerTest {
        // NFC not available, driving mode not available
        ReflectionHelpers.setField(mNfcController, "mNfcAdapter", null);
        assertThat(AdvancedConnectedDeviceController
                .getConnectedDevicesSummaryResourceId(mNfcController, false))
                .getConnectedDevicesSummaryResourceId(mNfcController, false, false))
                .isEqualTo(R.string.connected_devices_dashboard_no_driving_mode_no_nfc_summary);
    }

    @Test
    public void getConnectedDevicesSummaryResourceId_Auto_NFC_DrivingMode_Available() {
        // NFC available, driving mode available
        mShadowNfcAdapter.setEnabled(true);
        assertThat(AdvancedConnectedDeviceController
                .getConnectedDevicesSummaryResourceId(mNfcController, true, true))
                .isEqualTo(R.string.connected_devices_dashboard_android_auto_summary);
    }

    @Test
    public void getConnectedDevicesSummaryResourceId_Auto_NFC_Available() {
        // NFC is available, driving mode not available
        mShadowNfcAdapter.setEnabled(true);
        assertThat(AdvancedConnectedDeviceController
                .getConnectedDevicesSummaryResourceId(mNfcController, false, true))
                .isEqualTo(
                    R.string.connected_devices_dashboard_android_auto_no_driving_mode_summary);
    }

    @Test
    public void getConnectedDevicesSummaryResourceId_Auto_DrivingMode_Available() {
        // NFC not available, driving mode available
        ReflectionHelpers.setField(mNfcController, "mNfcAdapter", null);
        assertThat(AdvancedConnectedDeviceController
                .getConnectedDevicesSummaryResourceId(mNfcController, true, true))
                .isEqualTo(R.string.connected_devices_dashboard_android_auto_no_nfc_summary);
    }

    @Test
    public void getConnectedDevicesSummaryResourceId_Auto_Available() {
        // NFC not available, driving mode not available
        ReflectionHelpers.setField(mNfcController, "mNfcAdapter", null);
        assertThat(AdvancedConnectedDeviceController
                .getConnectedDevicesSummaryResourceId(mNfcController, false, true))
                .isEqualTo(
                    R.string.connected_devices_dashboard_android_auto_no_nfc_no_driving_mode);
    }

    private Intent buildAndroidAutoSettingsIntent() {
        final Intent intent = new Intent("com.android.settings.action.IA_SETTINGS");
        intent.setPackage(ANDROID_AUTO_PACKAGE);
        return intent;
    }
}