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

Commit 49cfe8a3 authored by Jake Hamby's avatar Jake Hamby
Browse files

Fix some Bluetooth settings bugs.

- Remove BluetoothFindNearby.java (no longer used)
- Show message when Bluetooth is turning off
- Fix case where device name sometimes didn't show when turning BT on
- Disable "Rename device" and "Visibility timeout" menus when BT is off
- Remove "Got onDeviceAdded, but cachedDevice already exists" log message
- Never show "Rename device" in action menu (bug 5064378)
- Show discovery time remaining as "m:ss", not "mm:ss" (bug 5064104)

Bug: 5064378
Bug: 5064104
Change-Id: I79609dfdad61993a28cff64c9e082870ff74d180
parent 672b3c65
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -290,9 +290,12 @@
    <string name="bluetooth_ask_enablement_and_lasting_discovery" product="tablet">"An application on your tablet is requesting permission to turn on Bluetooth and to make your tablet discoverable by other devices. Do you want to do this?"</string>
    <string name="bluetooth_ask_enablement_and_lasting_discovery" product="default">"An application on your phone is requesting permission to turn on Bluetooth and to make your phone discoverable by other devices. Do you want to do this?"</string>

    <!-- Strings for msg to display to user while bluetooth is turning on -->
    <!-- Strings for msg to display to user while bluetooth is turning on [CHAR LIMIT=60] -->
    <string name="bluetooth_turning_on">"Turning Bluetooth on\u2026"</string>

    <!-- Strings for msg to display to user while bluetooth is turning off [CHAR LIMIT=60] -->
    <string name="bluetooth_turning_off">"Turning Bluetooth off\u2026"</string>

    <!-- Strings for device profile auto connect setting -->
    <string name="bluetooth_auto_connect">Auto connect</string>

+13 −1
Original line number Diff line number Diff line
@@ -144,12 +144,24 @@ final class BluetoothDiscoverableEnabler implements Preference.OnPreferenceClick
        if (getDiscoverableTimeout() == DISCOVERABLE_TIMEOUT_NEVER) {
            mDiscoveryPreference.setSummary(R.string.bluetooth_is_discoverable_always);
        } else {
            String textTimeout = DateUtils.formatElapsedTime(timeout);
            String textTimeout = formatTimeRemaining(timeout);
            mDiscoveryPreference.setSummary(mContext.getString(R.string.bluetooth_is_discoverable,
                    textTimeout));
        }
    }

    private static String formatTimeRemaining(int timeout) {
        StringBuilder sb = new StringBuilder(6);    // "mmm:ss"
        int min = timeout / 60;
        sb.append(min).append(':');
        int sec = timeout - (min * 60);
        if (sec < 10) {
            sb.append('0');
        }
        sb.append(sec);
        return sb.toString();
    }

    void setDiscoverableTimeout(int index) {
        String timeoutValue;
        switch (index) {
+0 −71
Original line number Diff line number Diff line
/*
 * Copyright (C) 2011 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.bluetooth;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;

import com.android.settings.R;

/**
 * Fragment to scan and show the discoverable devices.
 */
public final class BluetoothFindNearby extends DeviceListPreferenceFragment {

    @Override
    void addPreferencesForActivity() {
        addPreferencesFromResource(R.xml.device_picker);
    }

    @Override
    public void onResume() {
        super.onResume();
        if (mSelectedDevice != null) {
            CachedBluetoothDeviceManager manager = mLocalManager.getCachedDeviceManager();
            CachedBluetoothDevice device = manager.findDevice(mSelectedDevice);
            if (device != null && device.getBondState() == BluetoothDevice.BOND_BONDED) {
                // selected device was paired, so return from this screen
                finish();
                return;
            }
        }
        mLocalAdapter.startScanning(true);
    }

    @Override
    void onDevicePreferenceClick(BluetoothDevicePreference btPreference) {
        mLocalAdapter.stopScanning();
        super.onDevicePreferenceClick(btPreference);
    }

    public void onDeviceBondStateChanged(CachedBluetoothDevice
            cachedDevice, int bondState) {
        if (bondState == BluetoothDevice.BOND_BONDED) {
            // return from scan screen after successful auto-pairing
            finish();
        }
    }

    @Override
    public void onBluetoothStateChanged(int bluetoothState) {
        super.onBluetoothStateChanged(bluetoothState);

        if (bluetoothState == BluetoothAdapter.STATE_ON) {
                mLocalAdapter.startScanning(false);
        }
    }
}
+19 −21
Original line number Diff line number Diff line
@@ -72,6 +72,8 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
    private View mView;
    private TextView mEmptyView;

    private final IntentFilter mIntentFilter;

    // accessed from inner class (not private to avoid thunks)
    Preference mMyDevicePreference;

@@ -79,21 +81,22 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED) ||
                    (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED) &&
                            (intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
                                    BluetoothAdapter.ERROR) == BluetoothAdapter.STATE_ON))) {
            if (action.equals(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED)) {
                updateDeviceName();
            }
        }

        private void updateDeviceName() {
            if (mLocalAdapter != null && mLocalAdapter.isEnabled() && mMyDevicePreference != null) {
            if (mLocalAdapter.isEnabled() && mMyDevicePreference != null) {
                mMyDevicePreference.setTitle(mLocalAdapter.getName());
            }
        }
    };

    public BluetoothSettings() {
        mIntentFilter = new IntentFilter(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
@@ -142,16 +145,12 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
        super.onResume();

        mBluetoothEnabler.resume();
        updateContent(mLocalAdapter.getBluetoothState());

        if (mDiscoverableEnabler != null) {
            mDiscoverableEnabler.resume();
        }
        getActivity().registerReceiver(mReceiver, mIntentFilter);

        IntentFilter filter = new IntentFilter();
        filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
        filter.addAction(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED);
        getActivity().registerReceiver(mReceiver, filter);
        updateContent(mLocalAdapter.getBluetoothState());
    }

    @Override
@@ -174,8 +173,10 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
                .setEnabled(bluetoothIsEnabled && !isDiscovering)
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        menu.add(Menu.NONE, MENU_ID_RENAME_DEVICE, 0, R.string.bluetooth_rename_device)
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
                .setEnabled(bluetoothIsEnabled)
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
        menu.add(Menu.NONE, MENU_ID_VISIBILITY_TIMEOUT, 0, R.string.bluetooth_visibility_timeout)
                .setEnabled(bluetoothIsEnabled)
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
        menu.add(Menu.NONE, MENU_ID_SHOW_RECEIVED, 0, R.string.bluetooth_show_received_files)
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
@@ -233,7 +234,6 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {

    private void updateContent(int bluetoothState) {
        final PreferenceScreen preferenceScreen = getPreferenceScreen();
        getActivity().invalidateOptionsMenu();
        int messageId = 0;

        switch (bluetoothState) {
@@ -245,9 +245,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
                if (mMyDevicePreference == null) {
                    mMyDevicePreference = new Preference(getActivity());
                }
                if (mLocalAdapter != null) {
                mMyDevicePreference.setTitle(mLocalAdapter.getName());
                }
                mMyDevicePreference.setPersistent(false);
                mMyDevicePreference.setEnabled(true);
                preferenceScreen.addPreference(mMyDevicePreference);
@@ -255,6 +253,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
                if (mDiscoverableEnabler == null) {
                    mDiscoverableEnabler = new BluetoothDiscoverableEnabler(getActivity(),
                            mLocalAdapter, mMyDevicePreference);
                    mDiscoverableEnabler.resume();
                }

                // Paired devices category
@@ -291,14 +290,12 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
                    preferenceScreen.removePreference(mPairedDevicesCategory);
                    startScanning();
                }
                getActivity().invalidateOptionsMenu();
                return; // not break

            case BluetoothAdapter.STATE_TURNING_OFF:
                int preferenceCount = preferenceScreen.getPreferenceCount();
                for (int i = 0; i < preferenceCount; i++) {
                    preferenceScreen.getPreference(i).setEnabled(false);
                }
                return; // not break
                messageId = R.string.bluetooth_turning_off;
                break;

            case BluetoothAdapter.STATE_OFF:
                messageId = R.string.bluetooth_empty_list_bluetooth_off;
@@ -312,6 +309,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment {
        setDeviceListGroup(preferenceScreen);
        removeAllDevices();
        mEmptyView.setText(messageId);
        getActivity().invalidateOptionsMenu();
    }

    @Override
+0 −1
Original line number Diff line number Diff line
@@ -151,7 +151,6 @@ public abstract class DeviceListPreferenceFragment extends

    public void onDeviceAdded(CachedBluetoothDevice cachedDevice) {
        if (mDevicePreferenceMap.get(cachedDevice) != null) {
            Log.e(TAG, "Got onDeviceAdded, but cachedDevice already exists");
            return;
        }