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