/*****************************************************************************
* Strings.java
*****************************************************************************
* Copyright © 2011-2014 VLC authors and VideoLAN
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
package org.videolan.vlc.util;
import android.text.TextUtils;
import org.videolan.vlc.MediaWrapper;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.List;
import java.util.Locale;
public class Strings {
public final static String TAG = "VLC/Util/Strings";
public static String stripTrailingSlash(String s) {
if( s.endsWith("/") && s.length() > 1 )
return s.substring(0, s.length() - 1);
return s;
}
static boolean startsWith(String[] array, String text) {
for (String item : array)
if (text.startsWith(item))
return true;
return false;
}
static int containsName(List<String> array, String text) {
for (int i = array.size()-1 ; i >= 0 ; --i)
if (array.get(i).endsWith(text))
return i;
return -1;
}
/**
* Convert time to a string
* @param millis e.g.time/length from file
* @return formated string (hh:)mm:ss
*/
public static String millisToString(long millis)
{
return Strings.millisToString(millis, false);
}
/**
* Convert time to a string
* @param millis e.g.time/length from file
* @return formated string "[hh]h[mm]min" / "[mm]min[s]s"
*/
public static String millisToText(long millis)
{
return Strings.millisToString(millis, true);
}
static String millisToString(long millis, boolean text) {
boolean negative = millis < 0;
millis = java.lang.Math.abs(millis);
millis /= 1000;
int sec = (int) (millis % 60);
millis /= 60;
int min = (int) (millis % 60);
millis /= 60;
int hours = (int) millis;
String time;
DecimalFormat format = (DecimalFormat)NumberFormat.getInstance(Locale.US);
format.applyPattern("00");
if (text) {
if (millis > 0)
time = (negative ? "-" : "") + hours + "h" + format.format(min) + "min";
else if (min > 0)
time = (negative ? "-" : "") + min + "min";
else
time = (negative ? "-" : "") + sec + "s";
}
else {
if (millis > 0)
time = (negative ? "-" : "") + hours + ":" + format.format(min) + ":" + format.format(sec);
else
time = (negative ? "-" : "") + min + ":" + format.format(sec);
}
return time;
}
/**
* equals() with two strings where either could be null
*/
public static boolean nullEquals(String s1, String s2) {
return (s1 == null ? s2 == null : s1.equals(s2));
}
/**
* Get the formatted current playback speed in the form of 1.00x
*/
public static String formatRateString(float rate) {
return String.format(java.util.Locale.US, "%.2fx", rate);
}
public static String readableFileSize(long size) {
if(size <= 0) return "0";
final String[] units = new String[] { "B", "KiB", "MiB", "GiB", "TiB" };
int digitGroups = (int) (Math.log10(size)/Math.log10(1024));
return new DecimalFormat("#,##0.#").format(size/Math.pow(1024, digitGroups)) + " " + units[digitGroups];
}
public static String getName(String path){
if (path == null)
return "";
int index = path.lastIndexOf('/');
if (index> -1)
return path.substring(index+1);
else
return path;
}
public static String getMediaTitle(MediaWrapper mediaWrapper){
String title = mediaWrapper.getTitle();
if (title == null)
title = getName(mediaWrapper.getLocation());
return title;
}
public static String getParent(String path){
if (TextUtils.equals("/", path))
return path;
String parentPath = path;
if (parentPath.endsWith("/"))
parentPath = parentPath.substring(0, parentPath.length()-1);
int index = parentPath.lastIndexOf('/');
if (index > 0){
parentPath = parentPath.substring(0, index);
} else if (index == 0)
parentPath = "/";
return parentPath;
}
public static String removeFileProtocole(String path){
if (path == null)
return null;
if (path.startsWith("file://"))
return path.substring(7);
else
return path;
}
}