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

Commit 2bb43acf authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker Committed by Anis Assi
Browse files

Merge cherrypicks of [16101567, 16145002] into security-aosp-rvc-release.

Change-Id: I2a15faca68aeaa4a026ef74930b68b4f01c6e41f
parents 916fc7fb 19a03ca7
Loading
Loading
Loading
Loading
+14 −0
Original line number Original line Diff line number Diff line
@@ -19,12 +19,15 @@ import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Context;
import android.net.Uri;
import android.net.Uri;
import android.provider.DeviceConfig;
import android.provider.DeviceConfig;
import android.text.TextUtils;
import android.util.Log;


import androidx.annotation.VisibleForTesting;
import androidx.annotation.VisibleForTesting;


import com.android.settings.R;
import com.android.settings.R;
import com.android.settings.core.SettingsUIDeviceConfig;
import com.android.settings.core.SettingsUIDeviceConfig;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.password.PasswordUtils;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.slices.SlicePreferenceController;
import com.android.settings.slices.SlicePreferenceController;
import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.search.SearchIndexable;
@@ -33,6 +36,9 @@ import com.android.settingslib.search.SearchIndexable;
public class ConnectedDeviceDashboardFragment extends DashboardFragment {
public class ConnectedDeviceDashboardFragment extends DashboardFragment {


    private static final String TAG = "ConnectedDeviceFrag";
    private static final String TAG = "ConnectedDeviceFrag";
    private static final String SETTINGS_PACKAGE_NAME = "com.android.settings";
    private static final String SYSTEMUI_PACKAGE_NAME = "com.android.systemui";
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);


    @VisibleForTesting
    @VisibleForTesting
    static final String KEY_CONNECTED_DEVICES = "connected_device_list";
    static final String KEY_CONNECTED_DEVICES = "connected_device_list";
@@ -69,12 +75,20 @@ public class ConnectedDeviceDashboardFragment extends DashboardFragment {
        super.onAttach(context);
        super.onAttach(context);
        final boolean nearbyEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
        final boolean nearbyEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
                SettingsUIDeviceConfig.BT_NEAR_BY_SUGGESTION_ENABLED, true);
                SettingsUIDeviceConfig.BT_NEAR_BY_SUGGESTION_ENABLED, true);
        String callingAppPackageName = PasswordUtils.getCallingAppPackageName(
                getActivity().getActivityToken());
        if (DEBUG) {
            Log.d(TAG, "onAttach() calling package name is : " + callingAppPackageName);
        }
        use(AvailableMediaDeviceGroupController.class).init(this);
        use(AvailableMediaDeviceGroupController.class).init(this);
        use(ConnectedDeviceGroupController.class).init(this);
        use(ConnectedDeviceGroupController.class).init(this);
        use(PreviouslyConnectedDevicePreferenceController.class).init(this);
        use(PreviouslyConnectedDevicePreferenceController.class).init(this);
        use(SlicePreferenceController.class).setSliceUri(nearbyEnabled
        use(SlicePreferenceController.class).setSliceUri(nearbyEnabled
                ? Uri.parse(getString(R.string.config_nearby_devices_slice_uri))
                ? Uri.parse(getString(R.string.config_nearby_devices_slice_uri))
                : null);
                : null);
        use(DiscoverableFooterPreferenceController.class).setAlwaysDiscoverable(
                TextUtils.equals(SETTINGS_PACKAGE_NAME, callingAppPackageName)
                        || TextUtils.equals(SYSTEMUI_PACKAGE_NAME, callingAppPackageName));
    }
    }


    /**
    /**
+17 −2
Original line number Original line Diff line number Diff line
@@ -52,6 +52,7 @@ public class DiscoverableFooterPreferenceController extends BasePreferenceContro
    private BluetoothAdapter mBluetoothAdapter;
    private BluetoothAdapter mBluetoothAdapter;
    private AlwaysDiscoverable mAlwaysDiscoverable;
    private AlwaysDiscoverable mAlwaysDiscoverable;
    private FooterPreference mPreference;
    private FooterPreference mPreference;
    private boolean mIsAlwaysDiscoverable;


    public DiscoverableFooterPreferenceController(Context context, String key) {
    public DiscoverableFooterPreferenceController(Context context, String key) {
        super(context, key);
        super(context, key);
@@ -84,7 +85,9 @@ public class DiscoverableFooterPreferenceController extends BasePreferenceContro
        }
        }
        mContext.registerReceiver(mBluetoothChangedReceiver,
        mContext.registerReceiver(mBluetoothChangedReceiver,
                new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
                new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
        if (mIsAlwaysDiscoverable) {
            mAlwaysDiscoverable.start();
            mAlwaysDiscoverable.start();
        }
        updateFooterPreferenceTitle(mBluetoothAdapter.getState());
        updateFooterPreferenceTitle(mBluetoothAdapter.getState());
    }
    }


@@ -94,8 +97,20 @@ public class DiscoverableFooterPreferenceController extends BasePreferenceContro
            return;
            return;
        }
        }
        mContext.unregisterReceiver(mBluetoothChangedReceiver);
        mContext.unregisterReceiver(mBluetoothChangedReceiver);
        if (mIsAlwaysDiscoverable) {
            mAlwaysDiscoverable.stop();
            mAlwaysDiscoverable.stop();
        }
        }
    }

    /**
     * Set whether the device can be discovered. By default the value will be {@code false}.
     *
     * @param isAlwaysDiscoverable {@code true} if the device can be discovered,
     *     otherwise {@code false}
     */
    public void setAlwaysDiscoverable(boolean isAlwaysDiscoverable) {
        mIsAlwaysDiscoverable = isAlwaysDiscoverable;
    }


    private void updateFooterPreferenceTitle(int bluetoothState) {
    private void updateFooterPreferenceTitle(int bluetoothState) {
        if (bluetoothState == BluetoothAdapter.STATE_ON) {
        if (bluetoothState == BluetoothAdapter.STATE_ON) {
+24 −2
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settings.connecteddevice;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertThat;


import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.when;
@@ -104,7 +105,8 @@ public class DiscoverableFooterPreferenceControllerTest {
    }
    }


    @Test
    @Test
    public void onStart_shouldRegisterBluetoothChanged() {
    public void onStart_setAlwaysDiscoverableAsTrue_shouldRegisterBluetoothChanged() {
        mDiscoverableFooterPreferenceController.setAlwaysDiscoverable(true);
        mDiscoverableFooterPreferenceController.onStart();
        mDiscoverableFooterPreferenceController.onStart();


        assertThat(getRegisteredBroadcastReceivers()).contains(mBluetoothChangedReceiver);
        assertThat(getRegisteredBroadcastReceivers()).contains(mBluetoothChangedReceiver);
@@ -112,7 +114,8 @@ public class DiscoverableFooterPreferenceControllerTest {
    }
    }


    @Test
    @Test
    public void onStop_shouldUnregisterBluetoothChanged() {
    public void onStop_setAlwaysDiscoverableAsTrue_shouldUnregisterBluetoothChanged() {
        mDiscoverableFooterPreferenceController.setAlwaysDiscoverable(true);
        mDiscoverableFooterPreferenceController.onStart();
        mDiscoverableFooterPreferenceController.onStart();
        mDiscoverableFooterPreferenceController.onStop();
        mDiscoverableFooterPreferenceController.onStop();


@@ -120,6 +123,25 @@ public class DiscoverableFooterPreferenceControllerTest {
        verify(mAlwaysDiscoverable).stop();
        verify(mAlwaysDiscoverable).stop();
    }
    }


    @Test
    public void onStart_setAlwaysDiscoverableAsFalse_shouldNotRegisterBluetoothChanged() {
        mDiscoverableFooterPreferenceController.setAlwaysDiscoverable(false);
        mDiscoverableFooterPreferenceController.onStart();

        assertThat(getRegisteredBroadcastReceivers()).contains(mBluetoothChangedReceiver);
        verify(mAlwaysDiscoverable, never()).start();
    }

    @Test
    public void onStop_setAlwaysDiscoverableAsFalse_shouldNotUnregisterBluetoothChanged() {
        mDiscoverableFooterPreferenceController.setAlwaysDiscoverable(false);
        mDiscoverableFooterPreferenceController.onStart();
        mDiscoverableFooterPreferenceController.onStop();

        assertThat(getRegisteredBroadcastReceivers()).doesNotContain(mBluetoothChangedReceiver);
        verify(mAlwaysDiscoverable, never()).stop();
    }

    @Test
    @Test
    public void onBluetoothStateChanged_bluetoothOn_updateTitle() {
    public void onBluetoothStateChanged_bluetoothOn_updateTitle() {
        BluetoothAdapter.getDefaultAdapter().setName(DEVICE_NAME);
        BluetoothAdapter.getDefaultAdapter().setName(DEVICE_NAME);