Merge "UI add more log" into udc-dev am: 378c2cf87b
am: b61e930c61
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/22371396 Change-Id: I7a0434a1b71160b7b9dbe57d1769801caae8405a Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -32,7 +32,7 @@ public class AvailableMediaBluetoothDeviceUpdater extends BluetoothDeviceUpdater
|
|||||||
implements Preference.OnPreferenceClickListener {
|
implements Preference.OnPreferenceClickListener {
|
||||||
|
|
||||||
private static final String TAG = "AvailableMediaBluetoothDeviceUpdater";
|
private static final String TAG = "AvailableMediaBluetoothDeviceUpdater";
|
||||||
private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
|
private static final boolean DBG = Log.isLoggable(BluetoothDeviceUpdater.TAG, Log.DEBUG);
|
||||||
|
|
||||||
private static final String PREF_KEY = "available_media_bt";
|
private static final String PREF_KEY = "available_media_bt";
|
||||||
|
|
||||||
@@ -111,4 +111,15 @@ public class AvailableMediaBluetoothDeviceUpdater extends BluetoothDeviceUpdater
|
|||||||
protected String getPreferenceKey() {
|
protected String getPreferenceKey() {
|
||||||
return PREF_KEY;
|
return PREF_KEY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getLogTag() {
|
||||||
|
return TAG;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void update(CachedBluetoothDevice cachedBluetoothDevice) {
|
||||||
|
super.update(cachedBluetoothDevice);
|
||||||
|
Log.d(TAG, "Map : " + mPreferenceMap);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -267,8 +267,6 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
|
|||||||
for (LocalBluetoothProfile profile : tmpResult) {
|
for (LocalBluetoothProfile profile : tmpResult) {
|
||||||
if (mProfileDeviceMap.containsKey(profile.toString())) {
|
if (mProfileDeviceMap.containsKey(profile.toString())) {
|
||||||
mProfileDeviceMap.get(profile.toString()).add(cachedItem);
|
mProfileDeviceMap.get(profile.toString()).add(cachedItem);
|
||||||
Log.d(TAG, "getProfiles: " + profile.toString() + " add device "
|
|
||||||
+ cachedItem.getDevice().getAnonymizedAddress());
|
|
||||||
} else {
|
} else {
|
||||||
List<CachedBluetoothDevice> tmpCachedDeviceList =
|
List<CachedBluetoothDevice> tmpCachedDeviceList =
|
||||||
new ArrayList<CachedBluetoothDevice>();
|
new ArrayList<CachedBluetoothDevice>();
|
||||||
@@ -303,7 +301,7 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
|
|||||||
result.remove(mManager.getProfileManager().getA2dpProfile());
|
result.remove(mManager.getProfileManager().getA2dpProfile());
|
||||||
result.remove(mManager.getProfileManager().getHeadsetProfile());
|
result.remove(mManager.getProfileManager().getHeadsetProfile());
|
||||||
}
|
}
|
||||||
Log.d(TAG, "getProfiles:result:" + result);
|
Log.d(TAG, "getProfiles:Map:" + mProfileDeviceMap);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -336,7 +334,8 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
|
|||||||
|
|
||||||
for (CachedBluetoothDevice leAudioDevice : mProfileDeviceMap.get(profile.toString())) {
|
for (CachedBluetoothDevice leAudioDevice : mProfileDeviceMap.get(profile.toString())) {
|
||||||
Log.d(TAG,
|
Log.d(TAG,
|
||||||
"User disable LE device: " + leAudioDevice.getDevice().getAnonymizedAddress());
|
"device:" + leAudioDevice.getDevice().getAnonymizedAddress()
|
||||||
|
+ "disable LE profile");
|
||||||
profile.setEnabled(leAudioDevice.getDevice(), false);
|
profile.setEnabled(leAudioDevice.getDevice(), false);
|
||||||
if (vcp != null) {
|
if (vcp != null) {
|
||||||
vcp.setEnabled(leAudioDevice.getDevice(), false);
|
vcp.setEnabled(leAudioDevice.getDevice(), false);
|
||||||
@@ -374,7 +373,8 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
|
|||||||
LocalBluetoothProfile csip = mProfileManager.getCsipSetCoordinatorProfile();
|
LocalBluetoothProfile csip = mProfileManager.getCsipSetCoordinatorProfile();
|
||||||
for (CachedBluetoothDevice leAudioDevice : mProfileDeviceMap.get(profile.toString())) {
|
for (CachedBluetoothDevice leAudioDevice : mProfileDeviceMap.get(profile.toString())) {
|
||||||
Log.d(TAG,
|
Log.d(TAG,
|
||||||
"User enable LE device: " + leAudioDevice.getDevice().getAnonymizedAddress());
|
"device:" + leAudioDevice.getDevice().getAnonymizedAddress()
|
||||||
|
+ "enable LE profile");
|
||||||
profile.setEnabled(leAudioDevice.getDevice(), true);
|
profile.setEnabled(leAudioDevice.getDevice(), true);
|
||||||
if (vcp != null) {
|
if (vcp != null) {
|
||||||
vcp.setEnabled(leAudioDevice.getDevice(), true);
|
vcp.setEnabled(leAudioDevice.getDevice(), true);
|
||||||
@@ -390,9 +390,12 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
|
|||||||
Log.d(TAG, "Disable " + profile.toString() + " before user enables LE");
|
Log.d(TAG, "Disable " + profile.toString() + " before user enables LE");
|
||||||
for (CachedBluetoothDevice profileDevice : mProfileDeviceMap.get(profile.toString())) {
|
for (CachedBluetoothDevice profileDevice : mProfileDeviceMap.get(profile.toString())) {
|
||||||
if (profile.isEnabled(profileDevice.getDevice())) {
|
if (profile.isEnabled(profileDevice.getDevice())) {
|
||||||
|
Log.d(TAG, "The " + profileDevice.getDevice().getAnonymizedAddress() + ":"
|
||||||
|
+ profile.toString() + " set disable");
|
||||||
profile.setEnabled(profileDevice.getDevice(), false);
|
profile.setEnabled(profileDevice.getDevice(), false);
|
||||||
} else {
|
} else {
|
||||||
Log.d(TAG, "The " + profile.toString() + " profile is disabled. Do nothing.");
|
Log.d(TAG, "The " + profileDevice.getDevice().getAnonymizedAddress() + ":"
|
||||||
|
+ profile.toString() + " profile is disabled. Do nothing.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -403,9 +406,12 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
|
|||||||
Log.d(TAG, "enable " + profile.toString() + "after user disables LE");
|
Log.d(TAG, "enable " + profile.toString() + "after user disables LE");
|
||||||
for (CachedBluetoothDevice profileDevice : mProfileDeviceMap.get(profile.toString())) {
|
for (CachedBluetoothDevice profileDevice : mProfileDeviceMap.get(profile.toString())) {
|
||||||
if (!profile.isEnabled(profileDevice.getDevice())) {
|
if (!profile.isEnabled(profileDevice.getDevice())) {
|
||||||
|
Log.d(TAG, "The " + profileDevice.getDevice().getAnonymizedAddress() + ":"
|
||||||
|
+ profile.toString() + " set enable");
|
||||||
profile.setEnabled(profileDevice.getDevice(), true);
|
profile.setEnabled(profileDevice.getDevice(), true);
|
||||||
} else {
|
} else {
|
||||||
Log.d(TAG, "The " + profile.toString() + " profile is enabled. Do nothing.");
|
Log.d(TAG, "The " + profileDevice.getDevice().getAnonymizedAddress() + ":"
|
||||||
|
+ profile.toString() + " profile is enabled. Do nothing.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -58,7 +58,7 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
|
|||||||
protected LocalBluetoothManager mLocalManager;
|
protected LocalBluetoothManager mLocalManager;
|
||||||
protected int mMetricsCategory;
|
protected int mMetricsCategory;
|
||||||
|
|
||||||
private static final String TAG = "BluetoothDeviceUpdater";
|
protected static final String TAG = "BluetoothDeviceUpdater";
|
||||||
private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
|
private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -88,7 +88,7 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
|
|||||||
*/
|
*/
|
||||||
public void registerCallback() {
|
public void registerCallback() {
|
||||||
if (mLocalManager == null) {
|
if (mLocalManager == null) {
|
||||||
Log.e(TAG, "registerCallback() Bluetooth is not supported on this device");
|
Log.e(getLogTag(), "registerCallback() Bluetooth is not supported on this device");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mLocalManager.setForegroundActivity(mContext);
|
mLocalManager.setForegroundActivity(mContext);
|
||||||
@@ -102,7 +102,7 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
|
|||||||
*/
|
*/
|
||||||
public void unregisterCallback() {
|
public void unregisterCallback() {
|
||||||
if (mLocalManager == null) {
|
if (mLocalManager == null) {
|
||||||
Log.e(TAG, "unregisterCallback() Bluetooth is not supported on this device");
|
Log.e(getLogTag(), "unregisterCallback() Bluetooth is not supported on this device");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mLocalManager.setForegroundActivity(null);
|
mLocalManager.setForegroundActivity(null);
|
||||||
@@ -115,7 +115,7 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
|
|||||||
*/
|
*/
|
||||||
public void forceUpdate() {
|
public void forceUpdate() {
|
||||||
if (mLocalManager == null) {
|
if (mLocalManager == null) {
|
||||||
Log.e(TAG, "forceUpdate() Bluetooth is not supported on this device");
|
Log.e(getLogTag(), "forceUpdate() Bluetooth is not supported on this device");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (BluetoothAdapter.getDefaultAdapter().isEnabled()) {
|
if (BluetoothAdapter.getDefaultAdapter().isEnabled()) {
|
||||||
@@ -131,7 +131,8 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
|
|||||||
|
|
||||||
public void removeAllDevicesFromPreference() {
|
public void removeAllDevicesFromPreference() {
|
||||||
if (mLocalManager == null) {
|
if (mLocalManager == null) {
|
||||||
Log.e(TAG, "removeAllDevicesFromPreference() BT is not supported on this device");
|
Log.e(getLogTag(),
|
||||||
|
"removeAllDevicesFromPreference() BT is not supported on this device");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final Collection<CachedBluetoothDevice> cachedDevices =
|
final Collection<CachedBluetoothDevice> cachedDevices =
|
||||||
@@ -172,7 +173,7 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
|
|||||||
public void onProfileConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state,
|
public void onProfileConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state,
|
||||||
int bluetoothProfile) {
|
int bluetoothProfile) {
|
||||||
if (DBG) {
|
if (DBG) {
|
||||||
Log.d(TAG, "onProfileConnectionStateChanged() device: " + cachedDevice.getName()
|
Log.d(getLogTag(), "onProfileConnectionStateChanged() device: " + cachedDevice.getName()
|
||||||
+ ", state: " + state + ", bluetoothProfile: " + bluetoothProfile);
|
+ ", state: " + state + ", bluetoothProfile: " + bluetoothProfile);
|
||||||
}
|
}
|
||||||
update(cachedDevice);
|
update(cachedDevice);
|
||||||
@@ -181,7 +182,7 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
|
|||||||
@Override
|
@Override
|
||||||
public void onAclConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state) {
|
public void onAclConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state) {
|
||||||
if (DBG) {
|
if (DBG) {
|
||||||
Log.d(TAG, "onAclConnectionStateChanged() device: " + cachedDevice.getName()
|
Log.d(getLogTag(), "onAclConnectionStateChanged() device: " + cachedDevice.getName()
|
||||||
+ ", state: " + state);
|
+ ", state: " + state);
|
||||||
}
|
}
|
||||||
update(cachedDevice);
|
update(cachedDevice);
|
||||||
@@ -312,8 +313,8 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
|
|||||||
}
|
}
|
||||||
final BluetoothDevice device = cachedDevice.getDevice();
|
final BluetoothDevice device = cachedDevice.getDevice();
|
||||||
if (DBG) {
|
if (DBG) {
|
||||||
Log.d(TAG, "isDeviceConnected() device name : " + cachedDevice.getName() +
|
Log.d(getLogTag(), "isDeviceConnected() device name : " + cachedDevice.getName()
|
||||||
", is connected : " + device.isConnected() + " , is profile connected : "
|
+ ", is connected : " + device.isConnected() + " , is profile connected : "
|
||||||
+ cachedDevice.isConnected());
|
+ cachedDevice.isConnected());
|
||||||
}
|
}
|
||||||
return device.getBondState() == BluetoothDevice.BOND_BONDED && device.isConnected();
|
return device.getBondState() == BluetoothDevice.BOND_BONDED && device.isConnected();
|
||||||
@@ -331,4 +332,7 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
|
|||||||
protected boolean isDeviceInCachedDevicesList(CachedBluetoothDevice cachedDevice){
|
protected boolean isDeviceInCachedDevicesList(CachedBluetoothDevice cachedDevice){
|
||||||
return mLocalManager.getCachedDeviceManager().getCachedDevicesCopy().contains(cachedDevice);
|
return mLocalManager.getCachedDeviceManager().getCachedDevicesCopy().contains(cachedDevice);
|
||||||
}
|
}
|
||||||
|
protected String getLogTag() {
|
||||||
|
return TAG;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -32,7 +32,7 @@ import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
|||||||
public class ConnectedBluetoothDeviceUpdater extends BluetoothDeviceUpdater {
|
public class ConnectedBluetoothDeviceUpdater extends BluetoothDeviceUpdater {
|
||||||
|
|
||||||
private static final String TAG = "ConnBluetoothDeviceUpdater";
|
private static final String TAG = "ConnBluetoothDeviceUpdater";
|
||||||
private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
|
private static final boolean DBG = Log.isLoggable(BluetoothDeviceUpdater.TAG, Log.DEBUG);
|
||||||
|
|
||||||
private static final String PREF_KEY = "connected_bt";
|
private static final String PREF_KEY = "connected_bt";
|
||||||
|
|
||||||
@@ -118,4 +118,15 @@ public class ConnectedBluetoothDeviceUpdater extends BluetoothDeviceUpdater {
|
|||||||
protected String getPreferenceKey() {
|
protected String getPreferenceKey() {
|
||||||
return PREF_KEY;
|
return PREF_KEY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getLogTag() {
|
||||||
|
return TAG;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void update(CachedBluetoothDevice cachedBluetoothDevice) {
|
||||||
|
super.update(cachedBluetoothDevice);
|
||||||
|
Log.d(TAG, "Map : " + mPreferenceMap);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -91,6 +91,7 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
LayoutPreference mLayoutPreference;
|
LayoutPreference mLayoutPreference;
|
||||||
private CachedBluetoothDevice mCachedDevice;
|
private CachedBluetoothDevice mCachedDevice;
|
||||||
|
private List<CachedBluetoothDevice> mLeAudioDevices;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
Handler mHandler = new Handler(Looper.getMainLooper());
|
Handler mHandler = new Handler(Looper.getMainLooper());
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -128,7 +129,13 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mIsRegisterCallback = true;
|
mIsRegisterCallback = true;
|
||||||
|
if (mLeAudioDevices != null && !mLeAudioDevices.isEmpty()) {
|
||||||
|
for (CachedBluetoothDevice item : mLeAudioDevices) {
|
||||||
|
item.registerCallback(this);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
mCachedDevice.registerCallback(this);
|
mCachedDevice.registerCallback(this);
|
||||||
|
}
|
||||||
refresh();
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,7 +144,13 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
|
|||||||
if (!mIsRegisterCallback) {
|
if (!mIsRegisterCallback) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (mLeAudioDevices != null && !mLeAudioDevices.isEmpty()) {
|
||||||
|
for (CachedBluetoothDevice item : mLeAudioDevices) {
|
||||||
|
item.unregisterCallback(this);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
mCachedDevice.unregisterCallback(this);
|
mCachedDevice.unregisterCallback(this);
|
||||||
|
}
|
||||||
mIsRegisterCallback = false;
|
mIsRegisterCallback = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,6 +162,8 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
|
|||||||
LocalBluetoothManager bluetoothManager) {
|
LocalBluetoothManager bluetoothManager) {
|
||||||
mCachedDevice = cachedBluetoothDevice;
|
mCachedDevice = cachedBluetoothDevice;
|
||||||
mProfileManager = bluetoothManager.getProfileManager();
|
mProfileManager = bluetoothManager.getProfileManager();
|
||||||
|
mLeAudioDevices = getAllOfLeAudioDevices();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -230,15 +245,15 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
|
|||||||
leAudioDevices.add(member);
|
leAudioDevices.add(member);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Log.d(TAG, "mLeAudioDevices is " + mLeAudioDevices);
|
||||||
return leAudioDevices;
|
return leAudioDevices;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateBatteryLayout() {
|
private void updateBatteryLayout() {
|
||||||
// Init the battery layouts.
|
// Init the battery layouts.
|
||||||
hideAllOfBatteryLayouts();
|
hideAllOfBatteryLayouts();
|
||||||
final List<CachedBluetoothDevice> leAudioDevices = getAllOfLeAudioDevices();
|
|
||||||
LeAudioProfile leAudioProfile = mProfileManager.getLeAudioProfile();
|
LeAudioProfile leAudioProfile = mProfileManager.getLeAudioProfile();
|
||||||
if (leAudioDevices == null || leAudioDevices.isEmpty()) {
|
if (mLeAudioDevices == null || mLeAudioDevices.isEmpty()) {
|
||||||
Log.e(TAG, "There is no LeAudioProfile.");
|
Log.e(TAG, "There is no LeAudioProfile.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -252,7 +267,7 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (CachedBluetoothDevice cachedDevice : leAudioDevices) {
|
for (CachedBluetoothDevice cachedDevice : mLeAudioDevices) {
|
||||||
int deviceId = leAudioProfile.getAudioLocation(cachedDevice.getDevice());
|
int deviceId = leAudioProfile.getAudioLocation(cachedDevice.getDevice());
|
||||||
Log.d(TAG, "LeAudioDevices:" + cachedDevice.getDevice().getAnonymizedAddress()
|
Log.d(TAG, "LeAudioDevices:" + cachedDevice.getDevice().getAnonymizedAddress()
|
||||||
+ ", deviceId:" + deviceId);
|
+ ", deviceId:" + deviceId);
|
||||||
|
@@ -38,7 +38,7 @@ public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater
|
|||||||
implements Preference.OnPreferenceClickListener {
|
implements Preference.OnPreferenceClickListener {
|
||||||
|
|
||||||
private static final String TAG = "SavedBluetoothDeviceUpdater";
|
private static final String TAG = "SavedBluetoothDeviceUpdater";
|
||||||
private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
|
private static final boolean DBG = Log.isLoggable(BluetoothDeviceUpdater.TAG, Log.DEBUG);
|
||||||
|
|
||||||
private static final String PREF_KEY = "saved_bt";
|
private static final String PREF_KEY = "saved_bt";
|
||||||
|
|
||||||
@@ -94,6 +94,7 @@ public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater
|
|||||||
} else {
|
} else {
|
||||||
removePreference(cachedDevice);
|
removePreference(cachedDevice);
|
||||||
}
|
}
|
||||||
|
Log.d(TAG, "Map : " + mPreferenceMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -127,4 +128,9 @@ public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater
|
|||||||
protected String getPreferenceKey() {
|
protected String getPreferenceKey() {
|
||||||
return PREF_KEY;
|
return PREF_KEY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getLogTag() {
|
||||||
|
return TAG;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user