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

Commit c21ad364 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Display "see all" option when bluetooth is off" into rvc-qpr-dev

parents bf99f9c3 30a97a9c
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -12179,4 +12179,7 @@
    <string name="media_controls_apps_title">Allowed apps</string>
    <!-- Keywords for the media controls setting [CHAR LIMIT=NONE]-->
    <string name="keywords_media_controls">media</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>
</resources>
+27 −0
Original line number Diff line number Diff line
@@ -16,7 +16,11 @@
package com.android.settings.connecteddevice;

import android.app.settings.SettingsEnums;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
import android.os.Bundle;

import androidx.annotation.VisibleForTesting;

import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
@@ -32,6 +36,9 @@ public class PreviouslyConnectedDeviceDashboardFragment extends DashboardFragmen
    private static final String TAG = "PreConnectedDeviceFrag";
    static final String KEY_PREVIOUSLY_CONNECTED_DEVICES = "saved_device_list";

    @VisibleForTesting
    BluetoothAdapter mBluetoothAdapter;

    @Override
    public int getHelpResource() {
        return R.string.help_url_previously_connected_devices;
@@ -52,12 +59,32 @@ public class PreviouslyConnectedDeviceDashboardFragment extends DashboardFragmen
        return SettingsEnums.PREVIOUSLY_CONNECTED_DEVICES;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        use(SavedDeviceGroupController.class).init(this);
    }

    @Override
    public void onStart() {
        super.onStart();
        enableBluetoothIfNecessary();
    }

    @VisibleForTesting
    void enableBluetoothIfNecessary() {
        if (mBluetoothAdapter != null && !mBluetoothAdapter.isEnabled()) {
            mBluetoothAdapter.enable();
        }
    }

    /**
     * For Search.
     */
+35 −5
Original line number Diff line number Diff line
@@ -15,7 +15,11 @@
 */
package com.android.settings.connecteddevice;

import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;

import androidx.annotation.VisibleForTesting;
@@ -23,6 +27,7 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceGroup;
import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.bluetooth.BluetoothDeviceUpdater;
import com.android.settings.bluetooth.SavedBluetoothDeviceUpdater;
import com.android.settings.connecteddevice.dock.DockUpdater;
@@ -37,17 +42,34 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc
        implements LifecycleObserver, OnStart, OnStop, DevicePreferenceCallback {

    private static final int MAX_DEVICE_NUM = 3;
    private static final String KEY_SEE_ALL = "previously_connected_devices_see_all";

    private PreferenceGroup mPreferenceGroup;
    private BluetoothDeviceUpdater mBluetoothDeviceUpdater;
    private DockUpdater mSavedDockUpdater;
    private int mPreferenceSize;
    private BluetoothAdapter mBluetoothAdapter;

    @VisibleForTesting
    Preference mSeeAllPreference;
    @VisibleForTesting
    IntentFilter mIntentFilter;

    @VisibleForTesting
    BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            updatePreferenceVisibility();
        }
    };

    public PreviouslyConnectedDevicePreferenceController(Context context, String preferenceKey) {
        super(context, preferenceKey);

        mSavedDockUpdater = FeatureFactory.getFactory(
                context).getDockUpdaterFeatureProvider().getSavedDockUpdater(context, this);
        mIntentFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    }

    @Override
@@ -62,7 +84,8 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        mPreferenceGroup = screen.findPreference(getPreferenceKey());
        mPreferenceGroup.setVisible(false);
        mSeeAllPreference = mPreferenceGroup.findPreference(KEY_SEE_ALL);
        updatePreferenceVisibility();

        if (isAvailable()) {
            final Context context = screen.getContext();
@@ -75,12 +98,14 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc
    public void onStart() {
        mBluetoothDeviceUpdater.registerCallback();
        mSavedDockUpdater.registerCallback();
        mContext.registerReceiver(mReceiver, mIntentFilter);
    }

    @Override
    public void onStop() {
        mBluetoothDeviceUpdater.unregisterCallback();
        mSavedDockUpdater.unregisterCallback();
        mContext.unregisterReceiver(mReceiver);
    }

    public void init(DashboardFragment fragment) {
@@ -94,14 +119,14 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc
        if (mPreferenceSize <= MAX_DEVICE_NUM) {
            mPreferenceGroup.addPreference(preference);
        }
        updatePreferenceVisiblity();
        updatePreferenceVisibility();
    }

    @Override
    public void onDeviceRemoved(Preference preference) {
        mPreferenceSize--;
        mPreferenceGroup.removePreference(preference);
        updatePreferenceVisiblity();
        updatePreferenceVisibility();
    }

    @VisibleForTesting
@@ -120,7 +145,12 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc
    }

    @VisibleForTesting
    void updatePreferenceVisiblity() {
        mPreferenceGroup.setVisible(mPreferenceSize > 0);
    void updatePreferenceVisibility() {
        if (mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()) {
            mSeeAllPreference.setSummary("");
        } else {
            mSeeAllPreference.setSummary(
                    mContext.getString(R.string.connected_device_see_all_summary));
        }
    }
}
+57 −0
Original line number Diff line number Diff line
/*
 * Copyright 2020 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.connecteddevice;

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

import android.bluetooth.BluetoothAdapter;

import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import org.robolectric.shadow.api.Shadow;

@RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowBluetoothAdapter.class)
public class PreviouslyConnectedDeviceDashboardFragmentTest {

    private ShadowBluetoothAdapter mShadowBluetoothAdapter;
    private PreviouslyConnectedDeviceDashboardFragment mFragment;

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

        mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
        mFragment = new PreviouslyConnectedDeviceDashboardFragment();
        mFragment.mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    }

    @Test
    public void onStart_bluetoothIsDisable_enableBluetooth() {
        mShadowBluetoothAdapter.setEnabled(false);

        assertThat(mFragment.mBluetoothAdapter.isEnabled()).isFalse();
        mFragment.enableBluetoothIfNecessary();

        assertThat(mFragment.mBluetoothAdapter.isEnabled()).isTrue();
    }
}
+31 −4
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;

import android.bluetooth.BluetoothAdapter;
import android.content.Context;
import android.content.pm.PackageManager;

@@ -32,9 +33,11 @@ import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceGroup;
import androidx.preference.PreferenceManager;

import com.android.settings.R;
import com.android.settings.bluetooth.BluetoothDeviceUpdater;
import com.android.settings.connecteddevice.dock.DockUpdater;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;

import org.junit.Before;
import org.junit.Test;
@@ -43,8 +46,11 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.shadow.api.Shadow;

@RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowBluetoothAdapter.class)
public class PreviouslyConnectedDevicePreferenceControllerTest {

    private final String KEY = "test_key";
@@ -59,10 +65,13 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
    private PackageManager mPackageManager;
    @Mock
    private PreferenceManager mPreferenceManager;
    @Mock
    private Preference mSeeAllPreference;

    private Context mContext;
    private PreviouslyConnectedDevicePreferenceController mPreConnectedDeviceController;
    private PreferenceGroup mPreferenceGroup;
    private ShadowBluetoothAdapter mShadowBluetoothAdapter;

    @Before
    public void setUp() {
@@ -74,11 +83,13 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
                new PreviouslyConnectedDevicePreferenceController(mContext, KEY);
        mPreConnectedDeviceController.setBluetoothDeviceUpdater(mBluetoothDeviceUpdater);
        mPreConnectedDeviceController.setSavedDockUpdater(mDockUpdater);
        mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());

        mPreferenceGroup = spy(new PreferenceCategory(mContext));
        doReturn(mPreferenceManager).when(mPreferenceGroup).getPreferenceManager();
        mPreferenceGroup.setVisible(false);
        mPreConnectedDeviceController.setPreferenceGroup(mPreferenceGroup);
        mPreConnectedDeviceController.mSeeAllPreference = mSeeAllPreference;
    }

    @Test
@@ -87,11 +98,14 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
        mPreConnectedDeviceController.onStart();
        verify(mBluetoothDeviceUpdater).registerCallback();
        verify(mDockUpdater).registerCallback();
        verify(mContext).registerReceiver(mPreConnectedDeviceController.mReceiver,
                mPreConnectedDeviceController.mIntentFilter);

        // unregister the callback in onStop()
        mPreConnectedDeviceController.onStop();
        verify(mBluetoothDeviceUpdater).unregisterCallback();
        verify(mDockUpdater).unregisterCallback();
        verify(mContext).unregisterReceiver(mPreConnectedDeviceController.mReceiver);
    }

    @Test
@@ -124,7 +138,6 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
    public void onDeviceAdded_addDevicePreference_displayIt() {
        mPreConnectedDeviceController.onDeviceAdded(new Preference(mContext));

        assertThat(mPreferenceGroup.isVisible()).isTrue();
        assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(1);
    }

@@ -135,7 +148,6 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
        mPreConnectedDeviceController.onDeviceAdded(new Preference(mContext));
        mPreConnectedDeviceController.onDeviceAdded(new Preference(mContext));

        assertThat(mPreferenceGroup.isVisible()).isTrue();
        assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(3);
    }

@@ -143,11 +155,26 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
    public void onDeviceRemoved_removeLastDevice_setInvisible() {
        final Preference preference = new Preference(mContext);
        mPreferenceGroup.addPreference(preference);
        mPreferenceGroup.setVisible(true);

        mPreConnectedDeviceController.onDeviceRemoved(preference);

        assertThat(mPreferenceGroup.isVisible()).isFalse();
        assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(0);
    }

    @Test
    public void updatePreferenceVisibility_bluetoothIsEnable_shouldShowCorrectText() {
        mShadowBluetoothAdapter.setEnabled(true);
        mPreConnectedDeviceController.updatePreferenceVisibility();

        verify(mSeeAllPreference).setSummary("");
    }

    @Test
    public void updatePreferenceVisibility_bluetoothIsDisable_shouldShowCorrectText() {
        mShadowBluetoothAdapter.setEnabled(false);
        mPreConnectedDeviceController.updatePreferenceVisibility();

        verify(mSeeAllPreference).setSummary(
                mContext.getString(R.string.connected_device_see_all_summary));
    }
}