/**
* Copyright (c) 2013, Redsolution LTD. All rights reserved.
*
* This file is part of Xabber project; you can redistribute it and/or
* modify it under the terms of the GNU General Public License, Version 3.
*
* Xabber 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, see http://www.gnu.org/licenses/.
*/
package com.xabber.android.utils;
import android.content.Context;
import android.content.res.Resources;
import com.xabber.android.data.Application;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
/**
* Helper class to get plural forms.
*
* @author alexander.ivanov
*/
public class StringUtils {
private static final DateFormat DATE_TIME;
private static final DateFormat TIME;
private static final String LOG_DATE_TIME_FORMAT = "HH:mm:ss yyyy-MM-dd";
static {
DATE_TIME = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,
DateFormat.SHORT);
TIME = new SimpleDateFormat("H:mm");
timeFormat = android.text.format.DateFormat.getTimeFormat(Application.getInstance());
}
private static SimpleDateFormat logDateTimeFormat;
private static DateFormat timeFormat;
private StringUtils() {
}
/**
* @param resources
* @param stringArrayResourceId
* @param quantity
* @return Plural string for the given quantity.
*/
public static String getQuantityString(Resources resources,
int stringArrayResourceId, long quantity) {
String[] strings = resources.getStringArray(stringArrayResourceId);
String lang = resources.getConfiguration().locale.getLanguage();
if ("ru".equals(lang) && strings.length == 3) {
quantity = quantity % 100;
if (quantity >= 20)
quantity = quantity % 10;
if (quantity == 1)
return strings[0];
if (quantity >= 2 && quantity < 5)
return strings[1];
return strings[2];
} else if (("cs".equals(lang) || "pl".equals(lang))
&& strings.length == 3) {
if (quantity == 1) {
return strings[0];
} else if (quantity >= 2 && quantity <= 4) {
return strings[1];
} else {
return strings[2];
}
} else {
if (quantity == 1) {
return strings[0];
} else {
return strings[1];
}
}
}
/**
* Escape input chars to be shown in html.
*
* @param input
* @return
*/
public static String escapeHtml(String input) {
StringBuilder builder = new StringBuilder();
int pos = 0;
int len = input.length();
while (pos < len) {
int codePoint = Character.codePointAt(input, pos);
if (codePoint == '"')
builder.append(""");
else if (codePoint == '&')
builder.append("&");
else if (codePoint == '<')
builder.append("<");
else if (codePoint == '>')
builder.append(">");
else if (codePoint == '\n')
builder.append("<br />");
else if (codePoint >= 0 && codePoint < 160)
builder.append(Character.toChars(codePoint));
else
builder.append("").append(codePoint).append(';');
pos += Character.charCount(codePoint);
}
return builder.toString();
}
/**
* @param timeStamp
* @return String with date and time to be display.
*/
public static String getDateTimeText(Date timeStamp) {
synchronized (DATE_TIME) {
return DATE_TIME.format(timeStamp);
}
}
/**
* @param timeStamp
* @return String with time or with date and time depend on current time.
*/
public static String getSmartTimeText(Context context, Date timeStamp) {
if (timeStamp == null) {
return "";
}
// today
Calendar midnight = new GregorianCalendar();
// reset hour, minutes, seconds and millis
midnight.set(Calendar.HOUR_OF_DAY, 0);
midnight.set(Calendar.MINUTE, 0);
midnight.set(Calendar.SECOND, 0);
midnight.set(Calendar.MILLISECOND, 0);
if (timeStamp.getTime() > midnight.getTimeInMillis()) {
return timeFormat.format(timeStamp);
} else {
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(context);
return dateFormat.format(timeStamp) + " " + timeFormat.format(timeStamp);
}
}
public static SimpleDateFormat getLogDateTimeFormat() {
if (logDateTimeFormat == null) {
logDateTimeFormat = new SimpleDateFormat(LOG_DATE_TIME_FORMAT, Locale.ENGLISH);
}
return logDateTimeFormat;
}
}