Merge "Apply user aspect ratio override settings" into udc-qpr-dev am: 9b4891843f
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/24014849 Change-Id: Ib31755187c5f4bab0eaa62cb665382eefbc4abbc Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -9416,6 +9416,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
|||||||
if (info.applicationInfo == null) {
|
if (info.applicationInfo == null) {
|
||||||
return info.getMinAspectRatio();
|
return info.getMinAspectRatio();
|
||||||
}
|
}
|
||||||
|
if (mLetterboxUiController.shouldApplyUserMinAspectRatioOverride()) {
|
||||||
|
return mLetterboxUiController.getUserMinAspectRatio();
|
||||||
|
}
|
||||||
if (!mLetterboxUiController.shouldOverrideMinAspectRatio()) {
|
if (!mLetterboxUiController.shouldOverrideMinAspectRatio()) {
|
||||||
return info.getMinAspectRatio();
|
return info.getMinAspectRatio();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,6 +40,12 @@ import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
|
|||||||
import static android.content.pm.ActivityInfo.isFixedOrientation;
|
import static android.content.pm.ActivityInfo.isFixedOrientation;
|
||||||
import static android.content.pm.ActivityInfo.isFixedOrientationLandscape;
|
import static android.content.pm.ActivityInfo.isFixedOrientationLandscape;
|
||||||
import static android.content.pm.ActivityInfo.screenOrientationToString;
|
import static android.content.pm.ActivityInfo.screenOrientationToString;
|
||||||
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_16_9;
|
||||||
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_3_2;
|
||||||
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_4_3;
|
||||||
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_DISPLAY_SIZE;
|
||||||
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_SPLIT_SCREEN;
|
||||||
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_UNSET;
|
||||||
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
|
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
|
||||||
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
|
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
|
||||||
import static android.content.res.Configuration.ORIENTATION_UNDEFINED;
|
import static android.content.res.Configuration.ORIENTATION_UNDEFINED;
|
||||||
@@ -103,6 +109,7 @@ import android.content.res.Resources;
|
|||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.Point;
|
import android.graphics.Point;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
|
import android.os.RemoteException;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
import android.view.InsetsSource;
|
import android.view.InsetsSource;
|
||||||
import android.view.InsetsState;
|
import android.view.InsetsState;
|
||||||
@@ -237,6 +244,10 @@ final class LetterboxUiController {
|
|||||||
// Counter for ActivityRecord#setRequestedOrientation
|
// Counter for ActivityRecord#setRequestedOrientation
|
||||||
private int mSetOrientationRequestCounter = 0;
|
private int mSetOrientationRequestCounter = 0;
|
||||||
|
|
||||||
|
// The min aspect ratio override set by user
|
||||||
|
@PackageManager.UserMinAspectRatio
|
||||||
|
private int mUserAspectRatio = USER_MIN_ASPECT_RATIO_UNSET;
|
||||||
|
|
||||||
// The CompatDisplayInsets of the opaque activity beneath the translucent one.
|
// The CompatDisplayInsets of the opaque activity beneath the translucent one.
|
||||||
private ActivityRecord.CompatDisplayInsets mInheritedCompatDisplayInsets;
|
private ActivityRecord.CompatDisplayInsets mInheritedCompatDisplayInsets;
|
||||||
|
|
||||||
@@ -1059,7 +1070,7 @@ final class LetterboxUiController {
|
|||||||
|
|
||||||
private float getDefaultMinAspectRatioForUnresizableApps() {
|
private float getDefaultMinAspectRatioForUnresizableApps() {
|
||||||
if (!mLetterboxConfiguration.getIsSplitScreenAspectRatioForUnresizableAppsEnabled()
|
if (!mLetterboxConfiguration.getIsSplitScreenAspectRatioForUnresizableAppsEnabled()
|
||||||
|| mActivityRecord.getDisplayContent() == null) {
|
|| mActivityRecord.getDisplayArea() == null) {
|
||||||
return mLetterboxConfiguration.getDefaultMinAspectRatioForUnresizableApps()
|
return mLetterboxConfiguration.getDefaultMinAspectRatioForUnresizableApps()
|
||||||
> MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO
|
> MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO
|
||||||
? mLetterboxConfiguration.getDefaultMinAspectRatioForUnresizableApps()
|
? mLetterboxConfiguration.getDefaultMinAspectRatioForUnresizableApps()
|
||||||
@@ -1071,8 +1082,8 @@ final class LetterboxUiController {
|
|||||||
|
|
||||||
float getSplitScreenAspectRatio() {
|
float getSplitScreenAspectRatio() {
|
||||||
// Getting the same aspect ratio that apps get in split screen.
|
// Getting the same aspect ratio that apps get in split screen.
|
||||||
final DisplayContent displayContent = mActivityRecord.getDisplayContent();
|
final DisplayArea displayArea = mActivityRecord.getDisplayArea();
|
||||||
if (displayContent == null) {
|
if (displayArea == null) {
|
||||||
return getDefaultMinAspectRatioForUnresizableApps();
|
return getDefaultMinAspectRatioForUnresizableApps();
|
||||||
}
|
}
|
||||||
int dividerWindowWidth =
|
int dividerWindowWidth =
|
||||||
@@ -1080,7 +1091,7 @@ final class LetterboxUiController {
|
|||||||
int dividerInsets =
|
int dividerInsets =
|
||||||
getResources().getDimensionPixelSize(R.dimen.docked_stack_divider_insets);
|
getResources().getDimensionPixelSize(R.dimen.docked_stack_divider_insets);
|
||||||
int dividerSize = dividerWindowWidth - dividerInsets * 2;
|
int dividerSize = dividerWindowWidth - dividerInsets * 2;
|
||||||
final Rect bounds = new Rect(displayContent.getWindowConfiguration().getAppBounds());
|
final Rect bounds = new Rect(displayArea.getWindowConfiguration().getAppBounds());
|
||||||
if (bounds.width() >= bounds.height()) {
|
if (bounds.width() >= bounds.height()) {
|
||||||
bounds.inset(/* dx */ dividerSize / 2, /* dy */ 0);
|
bounds.inset(/* dx */ dividerSize / 2, /* dy */ 0);
|
||||||
bounds.right = bounds.centerX();
|
bounds.right = bounds.centerX();
|
||||||
@@ -1091,14 +1102,57 @@ final class LetterboxUiController {
|
|||||||
return computeAspectRatio(bounds);
|
return computeAspectRatio(bounds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean shouldApplyUserMinAspectRatioOverride() {
|
||||||
|
if (!mLetterboxConfiguration.isUserAppAspectRatioSettingsEnabled()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
final int userAspectRatio = mActivityRecord.mAtmService.getPackageManager()
|
||||||
|
.getUserMinAspectRatio(mActivityRecord.packageName, mActivityRecord.mUserId);
|
||||||
|
mUserAspectRatio = userAspectRatio;
|
||||||
|
return userAspectRatio != USER_MIN_ASPECT_RATIO_UNSET;
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
// Don't apply user aspect ratio override
|
||||||
|
Slog.w(TAG, "Exception thrown retrieving aspect ratio user override " + this, e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float getUserMinAspectRatio() {
|
||||||
|
switch (mUserAspectRatio) {
|
||||||
|
case USER_MIN_ASPECT_RATIO_DISPLAY_SIZE:
|
||||||
|
return getDisplaySizeMinAspectRatio();
|
||||||
|
case USER_MIN_ASPECT_RATIO_SPLIT_SCREEN:
|
||||||
|
return getSplitScreenAspectRatio();
|
||||||
|
case USER_MIN_ASPECT_RATIO_16_9:
|
||||||
|
return 16 / 9f;
|
||||||
|
case USER_MIN_ASPECT_RATIO_4_3:
|
||||||
|
return 4 / 3f;
|
||||||
|
case USER_MIN_ASPECT_RATIO_3_2:
|
||||||
|
return 3 / 2f;
|
||||||
|
default:
|
||||||
|
throw new AssertionError("Unexpected user min aspect ratio override: "
|
||||||
|
+ mUserAspectRatio);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private float getDisplaySizeMinAspectRatio() {
|
||||||
|
final DisplayArea displayArea = mActivityRecord.getDisplayArea();
|
||||||
|
if (displayArea == null) {
|
||||||
|
return mActivityRecord.info.getMinAspectRatio();
|
||||||
|
}
|
||||||
|
final Rect bounds = new Rect(displayArea.getWindowConfiguration().getAppBounds());
|
||||||
|
return computeAspectRatio(bounds);
|
||||||
|
}
|
||||||
|
|
||||||
private float getDefaultMinAspectRatio() {
|
private float getDefaultMinAspectRatio() {
|
||||||
final DisplayContent displayContent = mActivityRecord.getDisplayContent();
|
if (mActivityRecord.getDisplayArea() == null
|
||||||
if (displayContent == null
|
|
||||||
|| !mLetterboxConfiguration
|
|| !mLetterboxConfiguration
|
||||||
.getIsDisplayAspectRatioEnabledForFixedOrientationLetterbox()) {
|
.getIsDisplayAspectRatioEnabledForFixedOrientationLetterbox()) {
|
||||||
return mLetterboxConfiguration.getFixedOrientationLetterboxAspectRatio();
|
return mLetterboxConfiguration.getFixedOrientationLetterboxAspectRatio();
|
||||||
}
|
}
|
||||||
return computeAspectRatio(new Rect(displayContent.getBounds()));
|
return getDisplaySizeMinAspectRatio();
|
||||||
}
|
}
|
||||||
|
|
||||||
Resources getResources() {
|
Resources getResources() {
|
||||||
|
|||||||
@@ -27,6 +27,11 @@ import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
|
|||||||
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
|
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
|
||||||
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
|
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
|
||||||
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
|
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
|
||||||
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_16_9;
|
||||||
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_3_2;
|
||||||
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_4_3;
|
||||||
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_DISPLAY_SIZE;
|
||||||
|
import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_SPLIT_SCREEN;
|
||||||
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
|
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
|
||||||
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
|
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
|
||||||
import static android.provider.DeviceConfig.NAMESPACE_CONSTRAIN_DISPLAY_APIS;
|
import static android.provider.DeviceConfig.NAMESPACE_CONSTRAIN_DISPLAY_APIS;
|
||||||
@@ -91,9 +96,12 @@ import android.compat.testing.PlatformCompatChangeRule;
|
|||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.pm.ActivityInfo;
|
import android.content.pm.ActivityInfo;
|
||||||
import android.content.pm.ActivityInfo.ScreenOrientation;
|
import android.content.pm.ActivityInfo.ScreenOrientation;
|
||||||
|
import android.content.pm.IPackageManager;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
|
import android.os.RemoteException;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.platform.test.annotations.Presubmit;
|
import android.platform.test.annotations.Presubmit;
|
||||||
import android.provider.DeviceConfig;
|
import android.provider.DeviceConfig;
|
||||||
@@ -2254,6 +2262,169 @@ public class SizeCompatTests extends WindowTestsBase {
|
|||||||
assertFitted();
|
assertFitted();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUserOverrideSplitScreenAspectRatioForLandscapeDisplay() {
|
||||||
|
final int displayWidth = 1600;
|
||||||
|
final int displayHeight = 1400;
|
||||||
|
setUpDisplaySizeWithApp(displayWidth, displayHeight);
|
||||||
|
|
||||||
|
float expectedAspectRatio = 1f * displayHeight / getExpectedSplitSize(displayWidth);
|
||||||
|
|
||||||
|
testUserOverrideAspectRatio(expectedAspectRatio, USER_MIN_ASPECT_RATIO_SPLIT_SCREEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUserOverrideSplitScreenAspectRatioForPortraitDisplay() {
|
||||||
|
final int displayWidth = 1400;
|
||||||
|
final int displayHeight = 1600;
|
||||||
|
setUpDisplaySizeWithApp(displayWidth, displayHeight);
|
||||||
|
|
||||||
|
float expectedAspectRatio = 1f * displayWidth / getExpectedSplitSize(displayHeight);
|
||||||
|
|
||||||
|
testUserOverrideAspectRatio(expectedAspectRatio, USER_MIN_ASPECT_RATIO_SPLIT_SCREEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUserOverrideDisplaySizeAspectRatioForLandscapeDisplay() {
|
||||||
|
final int displayWidth = 1600;
|
||||||
|
final int displayHeight = 1400;
|
||||||
|
setUpDisplaySizeWithApp(displayWidth, displayHeight);
|
||||||
|
|
||||||
|
float expectedAspectRatio = 1f * displayWidth / displayHeight;
|
||||||
|
|
||||||
|
testUserOverrideAspectRatio(expectedAspectRatio, USER_MIN_ASPECT_RATIO_DISPLAY_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUserOverrideDisplaySizeAspectRatioForPortraitDisplay() {
|
||||||
|
final int displayWidth = 1400;
|
||||||
|
final int displayHeight = 1600;
|
||||||
|
setUpDisplaySizeWithApp(displayWidth, displayHeight);
|
||||||
|
|
||||||
|
float expectedAspectRatio = 1f * displayHeight / displayWidth;
|
||||||
|
|
||||||
|
testUserOverrideAspectRatio(expectedAspectRatio, USER_MIN_ASPECT_RATIO_DISPLAY_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUserOverride32AspectRatioForPortraitDisplay() {
|
||||||
|
setUpDisplaySizeWithApp(/* dw */ 1400, /* dh */ 1600);
|
||||||
|
testUserOverrideAspectRatio(3 / 2f, USER_MIN_ASPECT_RATIO_3_2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUserOverride32AspectRatioForLandscapeDisplay() {
|
||||||
|
setUpDisplaySizeWithApp(/* dw */ 1600, /* dh */ 1400);
|
||||||
|
testUserOverrideAspectRatio(3 / 2f, USER_MIN_ASPECT_RATIO_3_2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUserOverride43AspectRatioForPortraitDisplay() {
|
||||||
|
setUpDisplaySizeWithApp(/* dw */ 1400, /* dh */ 1600);
|
||||||
|
testUserOverrideAspectRatio(4 / 3f, USER_MIN_ASPECT_RATIO_4_3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUserOverride43AspectRatioForLandscapeDisplay() {
|
||||||
|
setUpDisplaySizeWithApp(/* dw */ 1600, /* dh */ 1400);
|
||||||
|
testUserOverrideAspectRatio(4 / 3f, USER_MIN_ASPECT_RATIO_4_3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUserOverride169AspectRatioForPortraitDisplay() {
|
||||||
|
setUpDisplaySizeWithApp(/* dw */ 1800, /* dh */ 1500);
|
||||||
|
testUserOverrideAspectRatio(16 / 9f, USER_MIN_ASPECT_RATIO_16_9);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUserOverride169AspectRatioForLandscapeDisplay() {
|
||||||
|
setUpDisplaySizeWithApp(/* dw */ 1500, /* dh */ 1800);
|
||||||
|
testUserOverrideAspectRatio(16 / 9f, USER_MIN_ASPECT_RATIO_16_9);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO,
|
||||||
|
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_LARGE})
|
||||||
|
public void testUserOverrideAspectRatioOverSystemOverride() {
|
||||||
|
setUpDisplaySizeWithApp(/* dw */ 1600, /* dh */ 1400);
|
||||||
|
|
||||||
|
testUserOverrideAspectRatio(false,
|
||||||
|
SCREEN_ORIENTATION_PORTRAIT,
|
||||||
|
3 / 2f,
|
||||||
|
USER_MIN_ASPECT_RATIO_3_2,
|
||||||
|
true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUserOverrideAspectRatioNotEnabled() {
|
||||||
|
setUpDisplaySizeWithApp(/* dw */ 1600, /* dh */ 1400);
|
||||||
|
|
||||||
|
// App aspect ratio doesn't change
|
||||||
|
testUserOverrideAspectRatio(false,
|
||||||
|
SCREEN_ORIENTATION_PORTRAIT,
|
||||||
|
1f * 1600 / 1400,
|
||||||
|
USER_MIN_ASPECT_RATIO_3_2,
|
||||||
|
false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void testUserOverrideAspectRatio(float expectedAspectRatio,
|
||||||
|
@PackageManager.UserMinAspectRatio int aspectRatio) {
|
||||||
|
testUserOverrideAspectRatio(true,
|
||||||
|
SCREEN_ORIENTATION_PORTRAIT,
|
||||||
|
expectedAspectRatio,
|
||||||
|
aspectRatio,
|
||||||
|
true);
|
||||||
|
|
||||||
|
testUserOverrideAspectRatio(false,
|
||||||
|
SCREEN_ORIENTATION_PORTRAIT,
|
||||||
|
expectedAspectRatio,
|
||||||
|
aspectRatio,
|
||||||
|
true);
|
||||||
|
|
||||||
|
testUserOverrideAspectRatio(true,
|
||||||
|
SCREEN_ORIENTATION_LANDSCAPE,
|
||||||
|
expectedAspectRatio,
|
||||||
|
aspectRatio,
|
||||||
|
true);
|
||||||
|
|
||||||
|
testUserOverrideAspectRatio(false,
|
||||||
|
SCREEN_ORIENTATION_LANDSCAPE,
|
||||||
|
expectedAspectRatio,
|
||||||
|
aspectRatio,
|
||||||
|
true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void testUserOverrideAspectRatio(boolean isUnresizable, int screenOrientation,
|
||||||
|
float expectedAspectRatio, @PackageManager.UserMinAspectRatio int aspectRatio,
|
||||||
|
boolean enabled) {
|
||||||
|
final ActivityRecord activity = new ActivityBuilder(mAtm)
|
||||||
|
.setTask(mTask)
|
||||||
|
.setComponent(ComponentName.createRelative(mContext,
|
||||||
|
SizeCompatTests.class.getName()))
|
||||||
|
.setUid(android.os.Process.myUid())
|
||||||
|
.build();
|
||||||
|
activity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
|
||||||
|
activity.mWmService.mLetterboxConfiguration
|
||||||
|
.setUserAppAspectRatioSettingsOverrideEnabled(enabled);
|
||||||
|
// Set user aspect ratio override
|
||||||
|
final IPackageManager pm = mAtm.getPackageManager();
|
||||||
|
try {
|
||||||
|
doReturn(aspectRatio).when(pm)
|
||||||
|
.getUserMinAspectRatio(activity.packageName, activity.mUserId);
|
||||||
|
} catch (RemoteException ignored) {
|
||||||
|
}
|
||||||
|
|
||||||
|
prepareLimitedBounds(activity, screenOrientation, isUnresizable);
|
||||||
|
|
||||||
|
final Rect afterBounds = activity.getBounds();
|
||||||
|
final int width = afterBounds.width();
|
||||||
|
final int height = afterBounds.height();
|
||||||
|
final float afterAspectRatio =
|
||||||
|
(float) Math.max(width, height) / (float) Math.min(width, height);
|
||||||
|
|
||||||
|
assertEquals(expectedAspectRatio, afterAspectRatio, 0.001f);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO,
|
@EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO,
|
||||||
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN})
|
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN})
|
||||||
|
|||||||
Reference in New Issue
Block a user