19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.text.format;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
2007481ccd1dcc2912797ec64f0bfa5641b39adceaJesse Wilsonimport android.net.NetworkUtils;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Utility class to aid in formatting common values that are not covered
2441e2e1f9919c9ae3593610f7e05f0d9cf69ec9b2Joe Malin * by the {@link java.util.Formatter} class in {@link java.util}
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class Formatter {
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Formats a content size to be in the form of bytes, kilobytes, megabytes, etc
3007481ccd1dcc2912797ec64f0bfa5641b39adceaJesse Wilson     *
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param context Context to use to load the localized units
3207481ccd1dcc2912797ec64f0bfa5641b39adceaJesse Wilson     * @param number size value to be formatted
3307481ccd1dcc2912797ec64f0bfa5641b39adceaJesse Wilson     * @return formatted string with the number
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static String formatFileSize(Context context, long number) {
36bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn        return formatFileSize(context, number, false);
37bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn    }
3807481ccd1dcc2912797ec64f0bfa5641b39adceaJesse Wilson
39bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn    /**
40bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn     * Like {@link #formatFileSize}, but trying to generate shorter numbers
4107481ccd1dcc2912797ec64f0bfa5641b39adceaJesse Wilson     * (showing fewer digits of precision).
42bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn     */
43bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn    public static String formatShortFileSize(Context context, long number) {
44bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn        return formatFileSize(context, number, true);
45bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn    }
4607481ccd1dcc2912797ec64f0bfa5641b39adceaJesse Wilson
47bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn    private static String formatFileSize(Context context, long number, boolean shorter) {
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (context == null) {
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return "";
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        float result = number;
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int suffix = com.android.internal.R.string.byteShort;
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (result > 900) {
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            suffix = com.android.internal.R.string.kilobyteShort;
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            result = result / 1024;
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (result > 900) {
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            suffix = com.android.internal.R.string.megabyteShort;
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            result = result / 1024;
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (result > 900) {
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            suffix = com.android.internal.R.string.gigabyteShort;
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            result = result / 1024;
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (result > 900) {
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            suffix = com.android.internal.R.string.terabyteShort;
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            result = result / 1024;
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (result > 900) {
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            suffix = com.android.internal.R.string.petabyteShort;
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            result = result / 1024;
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
74bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn        String value;
75bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn        if (result < 1) {
76bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            value = String.format("%.2f", result);
77bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn        } else if (result < 10) {
78bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            if (shorter) {
79bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                value = String.format("%.1f", result);
80bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            } else {
81bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                value = String.format("%.2f", result);
82bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            }
83bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn        } else if (result < 100) {
84bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            if (shorter) {
85bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                value = String.format("%.0f", result);
86bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            } else {
87bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                value = String.format("%.2f", result);
88bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            }
89bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn        } else {
90bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            value = String.format("%.0f", result);
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
927351dd113f26580f3bcc7500746f3a26aecc4260Eric Fischer        return context.getResources().
937351dd113f26580f3bcc7500746f3a26aecc4260Eric Fischer            getString(com.android.internal.R.string.fileSizeSuffix,
947351dd113f26580f3bcc7500746f3a26aecc4260Eric Fischer                      value, context.getString(suffix));
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9607481ccd1dcc2912797ec64f0bfa5641b39adceaJesse Wilson
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns a string in the canonical IP format ###.###.###.### from a packed integer containing
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the IP address.  The IP address is expected to be in little-endian format (LSB first). That
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is, 0x01020304 will return "4.3.2.1".
10107481ccd1dcc2912797ec64f0bfa5641b39adceaJesse Wilson     *
10207481ccd1dcc2912797ec64f0bfa5641b39adceaJesse Wilson     * @param ipv4Address the IP address as a packed integer with LSB first.
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return string with canonical IP address format.
10407481ccd1dcc2912797ec64f0bfa5641b39adceaJesse Wilson     *
10507481ccd1dcc2912797ec64f0bfa5641b39adceaJesse Wilson     * @deprecated this method doesn't support IPv6 addresses. Prefer {@link
10607481ccd1dcc2912797ec64f0bfa5641b39adceaJesse Wilson     *     java.net.InetAddress#getHostAddress()}, which supports both IPv4 and
10707481ccd1dcc2912797ec64f0bfa5641b39adceaJesse Wilson     *     IPv6 addresses.
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
10907481ccd1dcc2912797ec64f0bfa5641b39adceaJesse Wilson    @Deprecated
11007481ccd1dcc2912797ec64f0bfa5641b39adceaJesse Wilson    public static String formatIpAddress(int ipv4Address) {
11107481ccd1dcc2912797ec64f0bfa5641b39adceaJesse Wilson        return NetworkUtils.intToInetAddress(ipv4Address).getHostAddress();
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
114