1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
/*
* Copyright (C) 2021 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.tv.settings.util;
import static java.math.RoundingMode.HALF_UP;
import android.content.Context;
import android.icu.number.LocalizedNumberFormatter;
import android.icu.number.NumberFormatter;
import android.view.Display;
import com.android.tv.settings.R;
import java.util.Locale;
/** This utility class for Resolution Setting **/
public class ResolutionSelectionUtils {
/**
* Returns the refresh rate converted to a string in the local language. If the refresh rate has
* only 0s after the floating point, they are removed.
* The unit "Hz" is added to end of refresh rate.
*/
public static String getRefreshRateString(float refreshRate) {
LocalizedNumberFormatter localizedNumberFormatter = NumberFormatter.with().roundingMode(
HALF_UP).locale(Locale.getDefault());
double roundedRefreshRate = Math.round(refreshRate * 100.0f) / 100.0f;
if (roundedRefreshRate % 1 == 0) {
return localizedNumberFormatter.format(roundedRefreshRate).toString();
} else {
return String.format(Locale.getDefault(), "%.2f",
localizedNumberFormatter.format(roundedRefreshRate).toBigDecimal());
}
}
/**
* Returns the resolution converted to a string. The unit "p" is added to end of refresh rate.
* If the resolution in 2160p, the string returned is "4k".
*/
public static String getResolutionString(int width, int height) {
int resolution = Math.min(width, height);
if (resolution == 2160) {
return "4k";
}
return resolution + "p";
}
/**
* Returns the {@link Display.Mode} converted to a string.
* Format: Resolution + "p" + RefreshRate + "Hz"
*/
public static String modeToString(Display.Mode mode, Context context) {
if (mode == null) {
return context.getString(R.string.resolution_selection_auto_title);
}
final String modeString = context.getString(R.string.resolution_display_mode,
ResolutionSelectionUtils.getResolutionString(
mode.getPhysicalWidth(), mode.getPhysicalHeight()),
ResolutionSelectionUtils.getRefreshRateString(mode.getRefreshRate()));
return modeString;
}
/**
* Returns the resolution mode converted to a string in the local language.
* Format: width + " x " + height
*/
public static String getResolutionSummary(int physicalWidth, int physicalHeight) {
LocalizedNumberFormatter localizedNumberFormatter = NumberFormatter.with().locale(
Locale.getDefault());
return localizedNumberFormatter.format(physicalWidth).toString() + " x "
+ localizedNumberFormatter.format(physicalHeight).toString();
}
}
|