diff --git a/res/layout/preference_widget_qrcode.xml b/res/layout/preference_widget_qrcode.xml new file mode 100644 index 00000000000..7994fe106f1 --- /dev/null +++ b/res/layout/preference_widget_qrcode.xml @@ -0,0 +1,25 @@ + + + + \ No newline at end of file diff --git a/res/xml/bluetooth_audio_sharing.xml b/res/xml/bluetooth_audio_sharing.xml index 86bb0628b68..ca7137af5fe 100644 --- a/res/xml/bluetooth_audio_sharing.xml +++ b/res/xml/bluetooth_audio_sharing.xml @@ -26,6 +26,12 @@ settings:controller="com.android.settings.connecteddevice.audiosharing.CallsAndAlarmsPreferenceController" android:summary=""/> + + - \ No newline at end of file diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingNamePreference.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingNamePreference.java new file mode 100644 index 00000000000..387ab7e0a4c --- /dev/null +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingNamePreference.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2023 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.audiosharing; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.ImageButton; + +import androidx.preference.PreferenceViewHolder; + +import com.android.settings.R; +import com.android.settings.widget.ValidatedEditTextPreference; + +public class AudioSharingNamePreference extends ValidatedEditTextPreference { + private static final String TAG = "AudioSharingNamePreference"; + + public AudioSharingNamePreference( + Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + initialize(); + } + + public AudioSharingNamePreference(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initialize(); + } + + public AudioSharingNamePreference(Context context, AttributeSet attrs) { + super(context, attrs); + initialize(); + } + + public AudioSharingNamePreference(Context context) { + super(context); + initialize(); + } + + private void initialize() { + setLayoutResource( + com.android.settingslib.widget.preference.twotarget.R.layout.preference_two_target); + setWidgetLayoutResource(R.layout.preference_widget_qrcode); + } + + @Override + public void onBindViewHolder(PreferenceViewHolder holder) { + super.onBindViewHolder(holder); + final ImageButton shareButton = (ImageButton) holder.findViewById(R.id.button_icon); + shareButton.setImageDrawable(getContext().getDrawable(R.drawable.ic_qrcode_24dp)); + } +} diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingNamePreferenceController.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingNamePreferenceController.java new file mode 100644 index 00000000000..18c9bfd4873 --- /dev/null +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingNamePreferenceController.java @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2023 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.audiosharing; + +import android.content.Context; + +import androidx.annotation.NonNull; +import androidx.lifecycle.DefaultLifecycleObserver; +import androidx.lifecycle.LifecycleOwner; +import androidx.preference.Preference; +import androidx.preference.PreferenceScreen; + +import com.android.settings.core.BasePreferenceController; +import com.android.settings.flags.Flags; +import com.android.settings.widget.ValidatedEditTextPreference; + +public class AudioSharingNamePreferenceController extends BasePreferenceController + implements ValidatedEditTextPreference.Validator, + Preference.OnPreferenceChangeListener, + DefaultLifecycleObserver { + + private static final String TAG = "AudioSharingNamePreferenceController"; + + private static final String PREF_KEY = "audio_sharing_stream_name"; + + protected Preference mPreference; + + private AudioSharingNameTextValidator mAudioSharingNameTextValidator; + + public AudioSharingNamePreferenceController(Context context) { + super(context, PREF_KEY); + mAudioSharingNameTextValidator = new AudioSharingNameTextValidator(); + } + + @Override + public int getAvailabilityStatus() { + return Flags.enableLeAudioSharing() ? AVAILABLE : UNSUPPORTED_ON_DEVICE; + } + + @Override + public String getPreferenceKey() { + return PREF_KEY; + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + // TODO: update broadcast when name is changed. + return true; + } + + @Override + public void displayPreference(PreferenceScreen screen) { + super.displayPreference(screen); + mPreference = screen.findPreference(getPreferenceKey()); + } + + @Override + public boolean isTextValid(String value) { + return mAudioSharingNameTextValidator.isTextValid(value); + } + + @Override + public void onStart(@NonNull LifecycleOwner owner) { + // TODO + } + + @Override + public void onStop(@NonNull LifecycleOwner owner) { + // TODO + } +} diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingNameTextValidator.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingNameTextValidator.java new file mode 100644 index 00000000000..94929614230 --- /dev/null +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingNameTextValidator.java @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2023 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.audiosharing; + +import com.android.settings.widget.ValidatedEditTextPreference; + +public class AudioSharingNameTextValidator implements ValidatedEditTextPreference.Validator { + @Override + public boolean isTextValid(String value) { + // TODO: Add validate rule if applicable. + return true; + } +}