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

Commit 726f1156 authored by Weilun Du's avatar Weilun Du
Browse files

Disable bluetooth controller if unsupported



Only disable the controllers not the whole fragment because
user might need to have entry for other features.

Change-Id: I9c44cca97189a2115785cf70aee8eb580ac56000
Fixes: 73664409
Signed-off-by: default avatarWeilun Du <wdu@google.com>
parent 203b923c
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -16,12 +16,14 @@

package com.android.settings.bluetooth;

import android.content.pm.PackageManager;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;

import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -30,7 +32,7 @@ import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
/**
 * Controller that shows received files
 */
public class BluetoothFilesPreferenceController extends AbstractPreferenceController
public class BluetoothFilesPreferenceController extends BasePreferenceController
        implements PreferenceControllerMixin {
    private static final String TAG = "BluetoothFilesPrefCtrl";

@@ -47,13 +49,15 @@ public class BluetoothFilesPreferenceController extends AbstractPreferenceContro
    private MetricsFeatureProvider mMetricsFeatureProvider;

    public BluetoothFilesPreferenceController(Context context) {
        super(context);
        super(context, KEY_RECEIVED_FILES);
        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
    }

    @Override
    public boolean isAvailable() {
        return true;
    public int getAvailabilityStatus() {
        return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)
                ? AVAILABLE
                : DISABLED_UNSUPPORTED;
    }

    @Override
+9 −2
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.VisibleForTesting;
import android.util.Log;

import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
@@ -71,7 +72,10 @@ public class BluetoothPairingDetail extends DeviceListPreferenceFragment impleme
    @Override
    public void onStart() {
        super.onStart();

        if (mLocalManager == null){
            Log.e(TAG, "Bluetooth is not supported on this device");
            return;
        }
        updateBluetooth();
        mAvailableDevicesCategory.setProgress(mLocalAdapter.isDiscovering());
    }
@@ -89,7 +93,10 @@ public class BluetoothPairingDetail extends DeviceListPreferenceFragment impleme
    @Override
    public void onStop() {
        super.onStop();

        if (mLocalManager == null){
            Log.e(TAG, "Bluetooth is not supported on this device");
            return;
        }
        // Make the device only visible to connected devices.
        mAlwaysDiscoverable.stop();
        disableScanning();
+18 −11
Original line number Diff line number Diff line
@@ -15,15 +15,18 @@
 */
package com.android.settings.connecteddevice;

import android.content.pm.PackageManager;
import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceGroup;
import android.support.v7.preference.PreferenceScreen;

import com.android.settings.connecteddevice.usb.ConnectedUsbDeviceUpdater;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.bluetooth.BluetoothDeviceUpdater;
import com.android.settings.bluetooth.ConnectedBluetoothDeviceUpdater;
import com.android.settings.search.ResultPayload;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -35,7 +38,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
 * Controller to maintain the {@link android.support.v7.preference.PreferenceGroup} for all
 * connected devices. It uses {@link DevicePreferenceCallback} to add/remove {@link Preference}
 */
public class ConnectedDeviceGroupController extends AbstractPreferenceController
public class ConnectedDeviceGroupController extends BasePreferenceController
        implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop,
        DevicePreferenceCallback {

@@ -47,7 +50,7 @@ public class ConnectedDeviceGroupController extends AbstractPreferenceController
    private ConnectedUsbDeviceUpdater mConnectedUsbDeviceUpdater;

    public ConnectedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle) {
        super(fragment.getContext());
        super(fragment.getContext(), KEY);
        init(lifecycle, new ConnectedBluetoothDeviceUpdater(fragment, this),
                new ConnectedUsbDeviceUpdater(fragment, this));
    }
@@ -56,7 +59,7 @@ public class ConnectedDeviceGroupController extends AbstractPreferenceController
    ConnectedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle,
            BluetoothDeviceUpdater bluetoothDeviceUpdater,
            ConnectedUsbDeviceUpdater connectedUsbDeviceUpdater) {
        super(fragment.getContext());
        super(fragment.getContext(), KEY);
        init(lifecycle, bluetoothDeviceUpdater, connectedUsbDeviceUpdater);
    }

@@ -75,6 +78,7 @@ public class ConnectedDeviceGroupController extends AbstractPreferenceController
    @Override
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        if (isAvailable()) {
            mPreferenceGroup = (PreferenceGroup) screen.findPreference(KEY);
            mPreferenceGroup.setVisible(false);

@@ -82,10 +86,13 @@ public class ConnectedDeviceGroupController extends AbstractPreferenceController
            mBluetoothDeviceUpdater.forceUpdate();
            mConnectedUsbDeviceUpdater.initUsbPreference(screen.getContext());
        }
    }

    @Override
    public boolean isAvailable() {
        return true;
    public int getAvailabilityStatus() {
        return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)
                ? AVAILABLE
                : DISABLED_UNSUPPORTED;
    }

    @Override
@@ -111,7 +118,7 @@ public class ConnectedDeviceGroupController extends AbstractPreferenceController

    private void init(Lifecycle lifecycle, BluetoothDeviceUpdater bluetoothDeviceUpdater,
            ConnectedUsbDeviceUpdater connectedUsbDeviceUpdater) {
        if (lifecycle != null) {
        if (lifecycle != null && isAvailable()) {
            lifecycle.addObserver(this);
        }
        mBluetoothDeviceUpdater = bluetoothDeviceUpdater;
+16 −10
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
 */
package com.android.settings.connecteddevice;

import android.content.pm.PackageManager;
import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceGroup;
@@ -22,6 +23,7 @@ import android.support.v7.preference.PreferenceScreen;

import com.android.settings.bluetooth.BluetoothDeviceUpdater;
import com.android.settings.bluetooth.SavedBluetoothDeviceUpdater;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -34,7 +36,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
 * Controller to maintain the {@link PreferenceGroup} for all
 * saved devices. It uses {@link DevicePreferenceCallback} to add/remove {@link Preference}
 */
public class SavedDeviceGroupController extends AbstractPreferenceController
public class SavedDeviceGroupController extends BasePreferenceController
        implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop,
        DevicePreferenceCallback {

@@ -45,14 +47,14 @@ public class SavedDeviceGroupController extends AbstractPreferenceController
    private BluetoothDeviceUpdater mBluetoothDeviceUpdater;

    public SavedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle) {
        super(fragment.getContext());
        super(fragment.getContext(), KEY);
        init(lifecycle, new SavedBluetoothDeviceUpdater(fragment, SavedDeviceGroupController.this));
    }

    @VisibleForTesting
    SavedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle,
            BluetoothDeviceUpdater bluetoothDeviceUpdater) {
        super(fragment.getContext());
        super(fragment.getContext(), KEY);
        init(lifecycle, bluetoothDeviceUpdater);
    }

@@ -68,15 +70,19 @@ public class SavedDeviceGroupController extends AbstractPreferenceController

    @Override
    public void displayPreference(PreferenceScreen screen) {
        if (isAvailable()) {
            mPreferenceGroup = (PreferenceGroup) screen.findPreference(KEY);
            mPreferenceGroup.setVisible(false);
            mBluetoothDeviceUpdater.setPrefContext(screen.getContext());
            mBluetoothDeviceUpdater.forceUpdate();
        }
    }

    @Override
    public boolean isAvailable() {
        return true;
    public int getAvailabilityStatus() {
        return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)
                ? AVAILABLE
                : DISABLED_UNSUPPORTED;
    }

    @Override
@@ -101,7 +107,7 @@ public class SavedDeviceGroupController extends AbstractPreferenceController
    }

    private void init(Lifecycle lifecycle, BluetoothDeviceUpdater bluetoothDeviceUpdater) {
        if (lifecycle != null) {
        if (lifecycle != null && isAvailable()) {
            lifecycle.addObserver(this);
        }
        mBluetoothDeviceUpdater = bluetoothDeviceUpdater;
+10 −2
Original line number Diff line number Diff line
@@ -18,6 +18,10 @@ package com.android.settings.bluetooth;

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

import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;

import android.content.pm.PackageManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
@@ -29,6 +33,7 @@ import com.android.settings.TestConfig;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@@ -40,15 +45,18 @@ public class BluetoothFilesPreferenceControllerTest {
    private Context mContext;
    private BluetoothFilesPreferenceController mController;
    private Preference mPreference;
    @Mock
    private PackageManager mPackageManager;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);

        mContext = RuntimeEnvironment.application;
        mContext = spy(RuntimeEnvironment.application);
        mController = new BluetoothFilesPreferenceController(mContext);
        mPreference = new Preference(mContext);
        mPreference.setKey(BluetoothFilesPreferenceController.KEY_RECEIVED_FILES);
        doReturn(mPackageManager).when(mContext).getPackageManager();
        doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH);
    }

    @Test
Loading