Refactor some Preference Controllers to use BasePreferenceController
Test: atest SettingsUnitTests Change-Id: Ic93f29d6c35cb1a43937fa7bf2f1e2d489cdd09f
This commit is contained in:
@@ -27,7 +27,8 @@
|
|||||||
android:key="encryption_and_credentials_encryption_status"
|
android:key="encryption_and_credentials_encryption_status"
|
||||||
android:title="@string/crypt_keeper_encrypt_title"
|
android:title="@string/crypt_keeper_encrypt_title"
|
||||||
android:fragment="com.android.settings.security.CryptKeeperSettings"
|
android:fragment="com.android.settings.security.CryptKeeperSettings"
|
||||||
android:summary="@string/summary_placeholder" />
|
android:summary="@string/summary_placeholder"
|
||||||
|
settings:controller="com.android.settings.security.EncryptionStatusPreferenceController"/>
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
@@ -47,20 +47,23 @@
|
|||||||
android:key="enterprise_privacy"
|
android:key="enterprise_privacy"
|
||||||
android:title="@string/enterprise_privacy_settings"
|
android:title="@string/enterprise_privacy_settings"
|
||||||
android:summary="@string/summary_placeholder"
|
android:summary="@string/summary_placeholder"
|
||||||
android:fragment="com.android.settings.enterprise.EnterprisePrivacySettings" />
|
android:fragment="com.android.settings.enterprise.EnterprisePrivacySettings"
|
||||||
|
settings:controller="com.android.settings.enterprise.EnterprisePrivacyPreferenceController"/>
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:key="financed_privacy"
|
android:key="financed_privacy"
|
||||||
android:title="@string/financed_privacy_settings"
|
android:title="@string/financed_privacy_settings"
|
||||||
android:summary="@string/summary_placeholder"
|
android:summary="@string/summary_placeholder"
|
||||||
android:fragment="com.android.settings.enterprise.EnterprisePrivacySettings" />
|
android:fragment="com.android.settings.enterprise.EnterprisePrivacySettings"
|
||||||
|
settings:controller="com.android.settings.enterprise.FinancedPrivacyPreferenceController"/>
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:order="50"
|
android:order="50"
|
||||||
android:key="sim_lock_settings"
|
android:key="sim_lock_settings"
|
||||||
android:title="@string/sim_lock_settings_category">
|
android:title="@string/sim_lock_settings_category"
|
||||||
|
settings:controller="com.android.settings.security.SimLockPreferenceController">
|
||||||
|
|
||||||
<intent
|
<intent
|
||||||
android:action="android.intent.action.MAIN"
|
android:action="android.intent.action.MAIN"
|
||||||
@@ -74,14 +77,16 @@
|
|||||||
android:key="encryption_and_credential"
|
android:key="encryption_and_credential"
|
||||||
android:title="@string/encryption_and_credential_settings_title"
|
android:title="@string/encryption_and_credential_settings_title"
|
||||||
android:summary="@string/encryption_and_credential_settings_summary"
|
android:summary="@string/encryption_and_credential_settings_summary"
|
||||||
android:fragment="com.android.settings.security.EncryptionAndCredential" />
|
android:fragment="com.android.settings.security.EncryptionAndCredential"
|
||||||
|
settings:controller="com.android.settings.security.EncryptionStatusPreferenceController" />
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:order="70"
|
android:order="70"
|
||||||
android:key="manage_trust_agents"
|
android:key="manage_trust_agents"
|
||||||
android:title="@string/manage_trust_agents"
|
android:title="@string/manage_trust_agents"
|
||||||
android:summary="@string/summary_placeholder"
|
android:summary="@string/summary_placeholder"
|
||||||
android:fragment="com.android.settings.security.trustagent.TrustAgentSettings" />
|
android:fragment="com.android.settings.security.trustagent.TrustAgentSettings"
|
||||||
|
settings:controller="com.android.settings.security.trustagent.ManageTrustAgentsPreferenceController" />
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:order="80"
|
android:order="80"
|
||||||
@@ -89,14 +94,15 @@
|
|||||||
android:title="@string/screen_pinning_title"
|
android:title="@string/screen_pinning_title"
|
||||||
android:summary="@string/summary_placeholder"
|
android:summary="@string/summary_placeholder"
|
||||||
android:fragment="com.android.settings.security.ScreenPinningSettings"
|
android:fragment="com.android.settings.security.ScreenPinningSettings"
|
||||||
settings:keywords="@string/keywords_app_pinning" />
|
settings:keywords="@string/keywords_app_pinning"
|
||||||
|
settings:controller="com.android.settings.security.ScreenPinningPreferenceController" />
|
||||||
|
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:order="90"
|
android:order="90"
|
||||||
android:key="confirm_sim_deletion"
|
android:key="confirm_sim_deletion"
|
||||||
android:title="@string/confirm_sim_deletion_title"
|
android:title="@string/confirm_sim_deletion_title"
|
||||||
android:summary="@string/confirm_sim_deletion_description"
|
android:summary="@string/confirm_sim_deletion_description"
|
||||||
settings:controller="com.android.settings.security.ConfirmSimDeletionPreferenceController"/>
|
settings:controller="com.android.settings.security.ConfirmSimDeletionPreferenceController" />
|
||||||
|
|
||||||
<!-- work profile security section -->
|
<!-- work profile security section -->
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
|
@@ -18,21 +18,15 @@ import android.content.Context;
|
|||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settings.core.PreferenceControllerMixin;
|
import com.android.settings.core.PreferenceControllerMixin;
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public class EnterprisePrivacyPreferenceController extends AbstractPreferenceController implements
|
public class EnterprisePrivacyPreferenceController extends BasePreferenceController implements
|
||||||
PreferenceControllerMixin {
|
PreferenceControllerMixin {
|
||||||
|
|
||||||
private static final String KEY_ENTERPRISE_PRIVACY = "enterprise_privacy";
|
|
||||||
private final PrivacyPreferenceControllerHelper mPrivacyPreferenceControllerHelper;
|
private final PrivacyPreferenceControllerHelper mPrivacyPreferenceControllerHelper;
|
||||||
private final String mPreferenceKey;
|
|
||||||
|
|
||||||
public EnterprisePrivacyPreferenceController(Context context) {
|
|
||||||
this(Objects.requireNonNull(context), KEY_ENTERPRISE_PRIVACY);
|
|
||||||
}
|
|
||||||
|
|
||||||
public EnterprisePrivacyPreferenceController(Context context, String key) {
|
public EnterprisePrivacyPreferenceController(Context context, String key) {
|
||||||
this(Objects.requireNonNull(context), new PrivacyPreferenceControllerHelper(context), key);
|
this(Objects.requireNonNull(context), new PrivacyPreferenceControllerHelper(context), key);
|
||||||
@@ -41,10 +35,9 @@ public class EnterprisePrivacyPreferenceController extends AbstractPreferenceCon
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
EnterprisePrivacyPreferenceController(Context context,
|
EnterprisePrivacyPreferenceController(Context context,
|
||||||
PrivacyPreferenceControllerHelper privacyPreferenceControllerHelper, String key) {
|
PrivacyPreferenceControllerHelper privacyPreferenceControllerHelper, String key) {
|
||||||
super(Objects.requireNonNull(context));
|
super(Objects.requireNonNull(context), key);
|
||||||
mPrivacyPreferenceControllerHelper = Objects.requireNonNull(
|
mPrivacyPreferenceControllerHelper = Objects.requireNonNull(
|
||||||
privacyPreferenceControllerHelper);
|
privacyPreferenceControllerHelper);
|
||||||
this.mPreferenceKey = key;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -53,13 +46,10 @@ public class EnterprisePrivacyPreferenceController extends AbstractPreferenceCon
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAvailable() {
|
public int getAvailabilityStatus() {
|
||||||
return mPrivacyPreferenceControllerHelper.hasDeviceOwner()
|
return mPrivacyPreferenceControllerHelper.hasDeviceOwner()
|
||||||
&& !mPrivacyPreferenceControllerHelper.isFinancedDevice();
|
&& !mPrivacyPreferenceControllerHelper.isFinancedDevice()
|
||||||
}
|
? AVAILABLE
|
||||||
|
: UNSUPPORTED_ON_DEVICE;
|
||||||
@Override
|
|
||||||
public String getPreferenceKey() {
|
|
||||||
return mPreferenceKey;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -21,22 +21,16 @@ import android.content.Context;
|
|||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settings.core.PreferenceControllerMixin;
|
import com.android.settings.core.PreferenceControllerMixin;
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
/** Preference controller which displays a financed preference for financed devices. */
|
/** Preference controller which displays a financed preference for financed devices. */
|
||||||
public class FinancedPrivacyPreferenceController extends AbstractPreferenceController implements
|
public class FinancedPrivacyPreferenceController extends BasePreferenceController implements
|
||||||
PreferenceControllerMixin {
|
PreferenceControllerMixin {
|
||||||
|
|
||||||
private static final String PREF_KEY_FINANCED_PRIVACY = "financed_privacy";
|
|
||||||
private final PrivacyPreferenceControllerHelper mPrivacyPreferenceControllerHelper;
|
private final PrivacyPreferenceControllerHelper mPrivacyPreferenceControllerHelper;
|
||||||
private final String mPreferenceKey;
|
|
||||||
|
|
||||||
public FinancedPrivacyPreferenceController(Context context) {
|
|
||||||
this(Objects.requireNonNull(context), PREF_KEY_FINANCED_PRIVACY);
|
|
||||||
}
|
|
||||||
|
|
||||||
public FinancedPrivacyPreferenceController(Context context, String key) {
|
public FinancedPrivacyPreferenceController(Context context, String key) {
|
||||||
this(Objects.requireNonNull(context), new PrivacyPreferenceControllerHelper(context), key);
|
this(Objects.requireNonNull(context), new PrivacyPreferenceControllerHelper(context), key);
|
||||||
@@ -45,10 +39,9 @@ public class FinancedPrivacyPreferenceController extends AbstractPreferenceContr
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
FinancedPrivacyPreferenceController(Context context,
|
FinancedPrivacyPreferenceController(Context context,
|
||||||
PrivacyPreferenceControllerHelper privacyPreferenceControllerHelper, String key) {
|
PrivacyPreferenceControllerHelper privacyPreferenceControllerHelper, String key) {
|
||||||
super(Objects.requireNonNull(context));
|
super(Objects.requireNonNull(context), key);
|
||||||
mPrivacyPreferenceControllerHelper = Objects.requireNonNull(
|
mPrivacyPreferenceControllerHelper = Objects.requireNonNull(
|
||||||
privacyPreferenceControllerHelper);
|
privacyPreferenceControllerHelper);
|
||||||
this.mPreferenceKey = key;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -57,12 +50,9 @@ public class FinancedPrivacyPreferenceController extends AbstractPreferenceContr
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAvailable() {
|
public int getAvailabilityStatus() {
|
||||||
return mPrivacyPreferenceControllerHelper.isFinancedDevice();
|
return mPrivacyPreferenceControllerHelper.isFinancedDevice()
|
||||||
}
|
? AVAILABLE
|
||||||
|
: CONDITIONALLY_UNAVAILABLE;
|
||||||
@Override
|
|
||||||
public String getPreferenceKey() {
|
|
||||||
return mPreferenceKey;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,12 +24,6 @@ import com.android.settings.core.BasePreferenceController;
|
|||||||
|
|
||||||
public class ScreenPinningPreferenceController extends BasePreferenceController {
|
public class ScreenPinningPreferenceController extends BasePreferenceController {
|
||||||
|
|
||||||
private static final String KEY_SCREEN_PINNING = "screen_pinning_settings";
|
|
||||||
|
|
||||||
public ScreenPinningPreferenceController(Context context) {
|
|
||||||
this(context, KEY_SCREEN_PINNING);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ScreenPinningPreferenceController(Context context, String key) {
|
public ScreenPinningPreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
}
|
}
|
||||||
@@ -37,7 +31,7 @@ public class ScreenPinningPreferenceController extends BasePreferenceController
|
|||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus() {
|
||||||
return mContext.getResources().getBoolean(R.bool.config_show_screen_pinning_settings)
|
return mContext.getResources().getBoolean(R.bool.config_show_screen_pinning_settings)
|
||||||
? AVAILABLE : UNSUPPORTED_ON_DEVICE;
|
? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -16,8 +16,6 @@
|
|||||||
|
|
||||||
package com.android.settings.security;
|
package com.android.settings.security;
|
||||||
|
|
||||||
import static com.android.settings.security.EncryptionStatusPreferenceController.PREF_KEY_ENCRYPTION_SECURITY_PAGE;
|
|
||||||
|
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -27,10 +25,7 @@ import com.android.settings.biometrics.combination.CombinedBiometricProfileStatu
|
|||||||
import com.android.settings.biometrics.face.FaceProfileStatusPreferenceController;
|
import com.android.settings.biometrics.face.FaceProfileStatusPreferenceController;
|
||||||
import com.android.settings.biometrics.fingerprint.FingerprintProfileStatusPreferenceController;
|
import com.android.settings.biometrics.fingerprint.FingerprintProfileStatusPreferenceController;
|
||||||
import com.android.settings.dashboard.DashboardFragment;
|
import com.android.settings.dashboard.DashboardFragment;
|
||||||
import com.android.settings.enterprise.EnterprisePrivacyPreferenceController;
|
|
||||||
import com.android.settings.enterprise.FinancedPrivacyPreferenceController;
|
|
||||||
import com.android.settings.search.BaseSearchIndexProvider;
|
import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
import com.android.settings.security.trustagent.ManageTrustAgentsPreferenceController;
|
|
||||||
import com.android.settings.security.trustagent.TrustAgentListPreferenceController;
|
import com.android.settings.security.trustagent.TrustAgentListPreferenceController;
|
||||||
import com.android.settings.widget.PreferenceCategoryController;
|
import com.android.settings.widget.PreferenceCategoryController;
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
@@ -96,13 +91,6 @@ public class SecurityAdvancedSettings extends DashboardFragment {
|
|||||||
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
|
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
|
||||||
Lifecycle lifecycle, DashboardFragment host) {
|
Lifecycle lifecycle, DashboardFragment host) {
|
||||||
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||||
controllers.add(new EnterprisePrivacyPreferenceController(context));
|
|
||||||
controllers.add(new FinancedPrivacyPreferenceController(context));
|
|
||||||
controllers.add(new ManageTrustAgentsPreferenceController(context));
|
|
||||||
controllers.add(new ScreenPinningPreferenceController(context));
|
|
||||||
controllers.add(new SimLockPreferenceController(context));
|
|
||||||
controllers.add(new EncryptionStatusPreferenceController(context,
|
|
||||||
PREF_KEY_ENCRYPTION_SECURITY_PAGE));
|
|
||||||
controllers.add(new TrustAgentListPreferenceController(context, host, lifecycle));
|
controllers.add(new TrustAgentListPreferenceController(context, host, lifecycle));
|
||||||
|
|
||||||
final List<AbstractPreferenceController> profileSecurityControllers = new ArrayList<>();
|
final List<AbstractPreferenceController> profileSecurityControllers = new ArrayList<>();
|
||||||
|
@@ -33,17 +33,11 @@ import java.util.List;
|
|||||||
|
|
||||||
public class SimLockPreferenceController extends BasePreferenceController {
|
public class SimLockPreferenceController extends BasePreferenceController {
|
||||||
|
|
||||||
private static final String KEY_SIM_LOCK = "sim_lock_settings";
|
|
||||||
|
|
||||||
private final CarrierConfigManager mCarrierConfigManager;
|
private final CarrierConfigManager mCarrierConfigManager;
|
||||||
private final UserManager mUserManager;
|
private final UserManager mUserManager;
|
||||||
private final SubscriptionManager mSubscriptionManager;
|
private final SubscriptionManager mSubscriptionManager;
|
||||||
private TelephonyManager mTelephonyManager;
|
private TelephonyManager mTelephonyManager;
|
||||||
|
|
||||||
public SimLockPreferenceController(Context context) {
|
|
||||||
this(context, KEY_SIM_LOCK);
|
|
||||||
}
|
|
||||||
|
|
||||||
public SimLockPreferenceController(Context context, String key) {
|
public SimLockPreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
||||||
|
@@ -19,7 +19,6 @@ package com.android.settings.security.trustagent;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.internal.widget.LockPatternUtils;
|
import com.android.internal.widget.LockPatternUtils;
|
||||||
@@ -30,17 +29,11 @@ import com.android.settings.security.SecurityFeatureProvider;
|
|||||||
|
|
||||||
public class ManageTrustAgentsPreferenceController extends BasePreferenceController {
|
public class ManageTrustAgentsPreferenceController extends BasePreferenceController {
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
static final String KEY_MANAGE_TRUST_AGENTS = "manage_trust_agents";
|
|
||||||
private static final int MY_USER_ID = UserHandle.myUserId();
|
private static final int MY_USER_ID = UserHandle.myUserId();
|
||||||
|
|
||||||
private final LockPatternUtils mLockPatternUtils;
|
private final LockPatternUtils mLockPatternUtils;
|
||||||
private TrustAgentManager mTrustAgentManager;
|
private TrustAgentManager mTrustAgentManager;
|
||||||
|
|
||||||
public ManageTrustAgentsPreferenceController(Context context) {
|
|
||||||
this(context, KEY_MANAGE_TRUST_AGENTS);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ManageTrustAgentsPreferenceController(Context context, String key) {
|
public ManageTrustAgentsPreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
final SecurityFeatureProvider securityFeatureProvider = FeatureFactory.getFactory(context)
|
final SecurityFeatureProvider securityFeatureProvider = FeatureFactory.getFactory(context)
|
||||||
|
@@ -46,7 +46,7 @@ public class ScreenPinningPreferenceControllerTest {
|
|||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mContext = RuntimeEnvironment.application;
|
mContext = RuntimeEnvironment.application;
|
||||||
mController = new ScreenPinningPreferenceController(mContext);
|
mController = new ScreenPinningPreferenceController(mContext, "key");
|
||||||
mPreference = new Preference(mContext);
|
mPreference = new Preference(mContext);
|
||||||
mPreference.setKey(mController.getPreferenceKey());
|
mPreference.setKey(mController.getPreferenceKey());
|
||||||
}
|
}
|
||||||
|
@@ -77,7 +77,7 @@ public class SimLockPreferenceControllerTest {
|
|||||||
shadowApplication.setSystemService(Context.USER_SERVICE, mUserManager);
|
shadowApplication.setSystemService(Context.USER_SERVICE, mUserManager);
|
||||||
shadowApplication.setSystemService(Context.TELEPHONY_SERVICE, mTelephonyManager);
|
shadowApplication.setSystemService(Context.TELEPHONY_SERVICE, mTelephonyManager);
|
||||||
mContext = RuntimeEnvironment.application;
|
mContext = RuntimeEnvironment.application;
|
||||||
mController = new SimLockPreferenceController(mContext);
|
mController = new SimLockPreferenceController(mContext, "key");
|
||||||
mPreference = new Preference(mContext);
|
mPreference = new Preference(mContext);
|
||||||
mPreference.setKey(mController.getPreferenceKey());
|
mPreference.setKey(mController.getPreferenceKey());
|
||||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
||||||
|
@@ -64,7 +64,7 @@ public class ManageTrustAgentsPreferenceControllerTest {
|
|||||||
.thenReturn(mLockPatternUtils);
|
.thenReturn(mLockPatternUtils);
|
||||||
when(mFeatureFactory.securityFeatureProvider.getTrustAgentManager())
|
when(mFeatureFactory.securityFeatureProvider.getTrustAgentManager())
|
||||||
.thenReturn(mTrustAgentManager);
|
.thenReturn(mTrustAgentManager);
|
||||||
mController = new ManageTrustAgentsPreferenceController(mContext);
|
mController = new ManageTrustAgentsPreferenceController(mContext, "key");
|
||||||
mPreference = new Preference(mContext);
|
mPreference = new Preference(mContext);
|
||||||
mPreference.setKey(mController.getPreferenceKey());
|
mPreference.setKey(mController.getPreferenceKey());
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user