Merge "Register callback again after service is connected" into main
This commit is contained in:
@@ -41,9 +41,12 @@ import com.android.settings.R;
|
|||||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||||
import com.android.settingslib.bluetooth.HapClientProfile;
|
import com.android.settingslib.bluetooth.HapClientProfile;
|
||||||
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
||||||
|
import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||||
import com.android.settingslib.core.lifecycle.events.OnPause;
|
import com.android.settingslib.core.lifecycle.events.OnPause;
|
||||||
import com.android.settingslib.core.lifecycle.events.OnResume;
|
import com.android.settingslib.core.lifecycle.events.OnResume;
|
||||||
|
import com.android.settingslib.core.lifecycle.events.OnStart;
|
||||||
|
import com.android.settingslib.core.lifecycle.events.OnStop;
|
||||||
import com.android.settingslib.utils.ThreadUtils;
|
import com.android.settingslib.utils.ThreadUtils;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -53,13 +56,16 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public class BluetoothDetailsHearingAidsPresetsController extends
|
public class BluetoothDetailsHearingAidsPresetsController extends
|
||||||
BluetoothDetailsController implements Preference.OnPreferenceChangeListener,
|
BluetoothDetailsController implements Preference.OnPreferenceChangeListener,
|
||||||
BluetoothHapClient.Callback, OnResume, OnPause {
|
BluetoothHapClient.Callback, LocalBluetoothProfileManager.ServiceListener,
|
||||||
|
OnStart, OnResume, OnPause, OnStop {
|
||||||
|
|
||||||
private static final boolean DEBUG = true;
|
private static final boolean DEBUG = true;
|
||||||
private static final String TAG = "BluetoothDetailsHearingAidsPresetsController";
|
private static final String TAG = "BluetoothDetailsHearingAidsPresetsController";
|
||||||
static final String KEY_HEARING_AIDS_PRESETS = "hearing_aids_presets";
|
static final String KEY_HEARING_AIDS_PRESETS = "hearing_aids_presets";
|
||||||
|
|
||||||
|
private final LocalBluetoothProfileManager mProfileManager;
|
||||||
private final HapClientProfile mHapClientProfile;
|
private final HapClientProfile mHapClientProfile;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private ListPreference mPreference;
|
private ListPreference mPreference;
|
||||||
|
|
||||||
@@ -69,25 +75,34 @@ public class BluetoothDetailsHearingAidsPresetsController extends
|
|||||||
@NonNull CachedBluetoothDevice device,
|
@NonNull CachedBluetoothDevice device,
|
||||||
@NonNull Lifecycle lifecycle) {
|
@NonNull Lifecycle lifecycle) {
|
||||||
super(context, fragment, device, lifecycle);
|
super(context, fragment, device, lifecycle);
|
||||||
mHapClientProfile = manager.getProfileManager().getHapClientProfile();
|
mProfileManager = manager.getProfileManager();
|
||||||
|
mHapClientProfile = mProfileManager.getHapClientProfile();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart() {
|
||||||
|
if (mHapClientProfile != null && !mHapClientProfile.isProfileReady()) {
|
||||||
|
mProfileManager.addServiceListener(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
|
registerHapCallback();
|
||||||
super.onResume();
|
super.onResume();
|
||||||
if (mHapClientProfile != null) {
|
|
||||||
mHapClientProfile.registerCallback(ThreadUtils.getBackgroundExecutor(), this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPause() {
|
public void onPause() {
|
||||||
if (mHapClientProfile != null) {
|
unregisterHapCallback();
|
||||||
mHapClientProfile.unregisterCallback(this);
|
|
||||||
}
|
|
||||||
super.onPause();
|
super.onPause();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStop() {
|
||||||
|
mProfileManager.removeServiceListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceChange(@NonNull Preference preference, @Nullable Object newValue) {
|
public boolean onPreferenceChange(@NonNull Preference preference, @Nullable Object newValue) {
|
||||||
if (TextUtils.equals(preference.getKey(), getPreferenceKey())) {
|
if (TextUtils.equals(preference.getKey(), getPreferenceKey())) {
|
||||||
@@ -203,9 +218,8 @@ public class BluetoothDetailsHearingAidsPresetsController extends
|
|||||||
public void onPresetSelectionFailed(@NonNull BluetoothDevice device, int reason) {
|
public void onPresetSelectionFailed(@NonNull BluetoothDevice device, int reason) {
|
||||||
if (device.equals(mCachedDevice.getDevice())) {
|
if (device.equals(mCachedDevice.getDevice())) {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG,
|
Log.d(TAG, "onPresetSelectionFailed, device: " + device.getAddress()
|
||||||
"onPresetSelectionFailed, device: " + device.getAddress()
|
+ ", reason: " + reason);
|
||||||
+ ", reason: " + reason);
|
|
||||||
}
|
}
|
||||||
mContext.getMainExecutor().execute(() -> {
|
mContext.getMainExecutor().execute(() -> {
|
||||||
refresh();
|
refresh();
|
||||||
@@ -305,4 +319,41 @@ public class BluetoothDetailsHearingAidsPresetsController extends
|
|||||||
Toast.makeText(mContext, R.string.bluetooth_hearing_aids_presets_error,
|
Toast.makeText(mContext, R.string.bluetooth_hearing_aids_presets_error,
|
||||||
Toast.LENGTH_SHORT).show();
|
Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void registerHapCallback() {
|
||||||
|
if (mHapClientProfile != null) {
|
||||||
|
try {
|
||||||
|
mHapClientProfile.registerCallback(ThreadUtils.getBackgroundExecutor(), this);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
// The callback was already registered
|
||||||
|
Log.w(TAG, "Cannot register callback: " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void unregisterHapCallback() {
|
||||||
|
if (mHapClientProfile != null) {
|
||||||
|
try {
|
||||||
|
mHapClientProfile.unregisterCallback(this);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
// The callback was never registered or was already unregistered
|
||||||
|
Log.w(TAG, "Cannot unregister callback: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceConnected() {
|
||||||
|
if (mHapClientProfile != null && mHapClientProfile.isProfileReady()) {
|
||||||
|
mProfileManager.removeServiceListener(this);
|
||||||
|
registerHapCallback();
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceDisconnected() {
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user