summaryrefslogtreecommitdiff
path: root/Settings/src/com/android/tv/settings/util/ResolutionSelectionUtils.java
blob: 72150403ed68598265a35f5594ff552d7a659522 (plain)
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();
    }
}