[3/n] Add aspect ratio app info page
Apps > App Info > Advanced > Aspect ratio Adds link from aspect ratio app list page to app info. Stops activity if user chooses a different aspect ratio override. To enable feature: adb shell device_config put window_manager enable_app_compat_user_aspect_ratio_settings true adb shell am force-stop com.android.settings Bug: 287448187 Test: Manual All Settings CUJs passed atest SettingsRoboTests:UserAspectRatioDetailsTest atest SettingsSpaUnitTests:UserAspectRatioAppPreferenceTest Change-Id: Id47f291459e62267bf15d629c163dde73d96928a
This commit is contained in:
@@ -28,6 +28,7 @@ import android.provider.DeviceConfig;
|
||||
import android.util.ArrayMap;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.settings.R;
|
||||
|
||||
@@ -91,6 +92,32 @@ public class UserAspectRatioManager {
|
||||
aspectRatio, mContext.getString(R.string.user_aspect_ratio_app_default));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return corresponding aspect ratio string for package name and user
|
||||
*/
|
||||
@NonNull
|
||||
public String getUserMinAspectRatioEntry(@NonNull String packageName, int uid)
|
||||
throws RemoteException {
|
||||
final int aspectRatio = getUserMinAspectRatioValue(packageName, uid);
|
||||
return getUserMinAspectRatioEntry(aspectRatio);
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether user aspect ratio option is specified in
|
||||
* {@link R.array.config_userAspectRatioOverrideValues}
|
||||
*/
|
||||
public boolean containsAspectRatioOption(@PackageManager.UserMinAspectRatio int option) {
|
||||
return mUserAspectRatioMap.containsKey(option);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets user-specified {@link PackageManager.UserMinAspectRatio} override for an app
|
||||
*/
|
||||
public void setUserMinAspectRatio(@NonNull String packageName, int uid,
|
||||
@PackageManager.UserMinAspectRatio int aspectRatio) throws RemoteException {
|
||||
mIPm.setUserMinAspectRatio(packageName, uid, aspectRatio);
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether an app's aspect ratio can be overridden by user. Only apps with launcher entry
|
||||
* will be overridable.
|
||||
@@ -122,14 +149,17 @@ public class UserAspectRatioManager {
|
||||
final Map<Integer, String> userMinAspectRatioMap = new ArrayMap<>();
|
||||
for (int i = 0; i < userMinAspectRatioValues.length; i++) {
|
||||
final int aspectRatioVal = userMinAspectRatioValues[i];
|
||||
final String aspectRatioString = getAspectRatioStringOrDefault(
|
||||
userMinAspectRatioStrings[i], aspectRatioVal);
|
||||
switch (aspectRatioVal) {
|
||||
// Only map known values of UserMinAspectRatio and ignore unknown entries
|
||||
case PackageManager.USER_MIN_ASPECT_RATIO_UNSET:
|
||||
case PackageManager.USER_MIN_ASPECT_RATIO_SPLIT_SCREEN:
|
||||
case PackageManager.USER_MIN_ASPECT_RATIO_DISPLAY_SIZE:
|
||||
case PackageManager.USER_MIN_ASPECT_RATIO_4_3:
|
||||
case PackageManager.USER_MIN_ASPECT_RATIO_16_9:
|
||||
case PackageManager.USER_MIN_ASPECT_RATIO_3_2:
|
||||
userMinAspectRatioMap.put(aspectRatioVal, userMinAspectRatioStrings[i]);
|
||||
userMinAspectRatioMap.put(aspectRatioVal, aspectRatioString);
|
||||
}
|
||||
}
|
||||
if (!userMinAspectRatioMap.containsKey(PackageManager.USER_MIN_ASPECT_RATIO_UNSET)) {
|
||||
@@ -139,6 +169,29 @@ public class UserAspectRatioManager {
|
||||
return userMinAspectRatioMap;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private String getAspectRatioStringOrDefault(@Nullable String aspectRatioString,
|
||||
@PackageManager.UserMinAspectRatio int aspectRatioVal) {
|
||||
if (aspectRatioString != null) {
|
||||
return aspectRatioString;
|
||||
}
|
||||
// Options are customized per device and if strings are set to @null, use default
|
||||
switch (aspectRatioVal) {
|
||||
case PackageManager.USER_MIN_ASPECT_RATIO_SPLIT_SCREEN:
|
||||
return mContext.getString(R.string.user_aspect_ratio_half_screen);
|
||||
case PackageManager.USER_MIN_ASPECT_RATIO_DISPLAY_SIZE:
|
||||
return mContext.getString(R.string.user_aspect_ratio_device_size);
|
||||
case PackageManager.USER_MIN_ASPECT_RATIO_4_3:
|
||||
return mContext.getString(R.string.user_aspect_ratio_4_3);
|
||||
case PackageManager.USER_MIN_ASPECT_RATIO_16_9:
|
||||
return mContext.getString(R.string.user_aspect_ratio_16_9);
|
||||
case PackageManager.USER_MIN_ASPECT_RATIO_3_2:
|
||||
return mContext.getString(R.string.user_aspect_ratio_3_2);
|
||||
default:
|
||||
return mContext.getString(R.string.user_aspect_ratio_app_default);
|
||||
}
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void addInfoHasLauncherEntry(@NonNull ResolveInfo infoHasLauncherEntry) {
|
||||
mInfoHasLauncherEntryList.add(infoHasLauncherEntry);
|
||||
|
Reference in New Issue
Block a user