| /****************************************************************************** |
| * Copyright (c) 2020, The Linux Foundation. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are |
| * met: |
| * * Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * * Redistributions in binary form must reproduce the above |
| * copyright notice, this list of conditions and the following |
| * disclaimer in the documentation and/or other materials provided |
| * with the distribution. |
| * * Neither the name of The Linux Foundation nor the names of its |
| * contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED |
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS |
| * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR |
| * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
| * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE |
| * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN |
| * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| *****************************************************************************/ |
| |
| package com.android.settings.bluetooth; |
| |
| import android.content.Context; |
| import android.content.pm.PackageManager; |
| |
| import androidx.preference.PreferenceFragmentCompat; |
| |
| import androidx.preference.Preference; |
| import androidx.preference.PreferenceGroup; |
| import androidx.preference.PreferenceScreen; |
| import com.android.settings.bluetooth.BluetoothDevicePreference; |
| import com.android.settings.bluetooth.BluetoothDeviceUpdater; |
| import com.android.settings.connecteddevice.DevicePreferenceCallback; |
| import com.android.settings.connecteddevice.dock.DockUpdater; |
| import com.android.settings.core.BasePreferenceController; |
| import com.android.settings.core.PreferenceControllerMixin; |
| import com.android.settings.dashboard.DashboardFragment; |
| import com.android.settings.overlay.DockUpdaterFeatureProvider; |
| import com.android.settings.overlay.FeatureFactory; |
| import com.android.settings.widget.GearPreference; |
| import com.android.settings.widget.GearPreference.OnGearClickListener; |
| import com.android.settingslib.bluetooth.CachedBluetoothDevice; |
| import com.android.settingslib.core.lifecycle.Lifecycle; |
| import com.android.settingslib.core.lifecycle.LifecycleObserver; |
| import com.android.settingslib.core.lifecycle.events.OnStart; |
| import com.android.settingslib.core.lifecycle.events.OnStop; |
| import com.android.settingslib.core.lifecycle.events.OnResume; |
| |
| /** |
| * Controller to maintain connected Group devices (Connected but not active) |
| */ |
| public class GroupBluetoothDevicesConnectedController extends BasePreferenceController |
| implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop, |
| DevicePreferenceCallback { |
| |
| private static final String KEY = "group_options_connected_devices"; |
| private static final String TAG = "GroupBluetoothDevicesConnectedController"; |
| private PreferenceGroup mPreferenceGroup; |
| private GroupBluetoothDevicesConnectedUpdater mGroupDeviceUpdater; |
| private int mGroupId; |
| |
| public GroupBluetoothDevicesConnectedController(Context context, DashboardFragment fragment, |
| Lifecycle lifecycle, int groupid) { |
| super(context, KEY); |
| mGroupId = groupid; |
| lifecycle.addObserver(this); |
| mGroupDeviceUpdater = new GroupBluetoothDevicesConnectedUpdater(fragment.getContext(), |
| fragment, this, mGroupId); |
| } |
| |
| @Override |
| public void onStart() { |
| mGroupDeviceUpdater.registerCallback(); |
| } |
| |
| @Override |
| public void onStop() { |
| mGroupDeviceUpdater.unregisterCallback(); |
| } |
| |
| @Override |
| public void displayPreference(PreferenceScreen screen) { |
| mPreferenceGroup = screen.findPreference(KEY); |
| mPreferenceGroup.setVisible(false); |
| if (isAvailable()) { |
| final Context context = screen.getContext(); |
| mGroupDeviceUpdater.setPrefContext(context); |
| mGroupDeviceUpdater.forceUpdate(); |
| } |
| } |
| |
| @Override |
| public int getAvailabilityStatus() { |
| return (mContext.getPackageManager().hasSystemFeature( |
| PackageManager.FEATURE_BLUETOOTH)) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; |
| } |
| |
| @Override |
| public String getPreferenceKey() { |
| return KEY; |
| } |
| |
| @Override |
| public void onDeviceAdded(Preference preference) { |
| if (mPreferenceGroup.getPreferenceCount() == 0) { |
| mPreferenceGroup.setVisible(true); |
| } |
| mPreferenceGroup.addPreference(preference); |
| } |
| |
| @Override |
| public void onDeviceRemoved(Preference preference) { |
| mPreferenceGroup.removePreference(preference); |
| if (mPreferenceGroup.getPreferenceCount() == 0) { |
| mPreferenceGroup.setVisible(false); |
| } |
| } |
| } |