mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 12:53:55 +01:00
162 lines
5.4 KiB
Java
162 lines
5.4 KiB
Java
package fr.free.nrw.commons;
|
|
|
|
import android.content.Context;
|
|
import android.preference.PreferenceManager;
|
|
import android.support.annotation.NonNull;
|
|
|
|
import org.apache.commons.codec.binary.Hex;
|
|
import org.apache.commons.codec.digest.DigestUtils;
|
|
|
|
import java.io.BufferedReader;
|
|
import java.io.IOException;
|
|
import java.io.InputStreamReader;
|
|
import java.io.UnsupportedEncodingException;
|
|
import java.net.URLEncoder;
|
|
import java.util.Locale;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
|
|
import fr.free.nrw.commons.settings.Prefs;
|
|
import timber.log.Timber;
|
|
|
|
public class Utils {
|
|
|
|
/**
|
|
* Strips localization symbols from a string.
|
|
* Removes the suffix after "@" and quotes.
|
|
*
|
|
* @param s string possibly containing localization symbols
|
|
* @return stripped string
|
|
*/
|
|
public static String stripLocalizedString(String s) {
|
|
Matcher matcher = Pattern.compile("\\\"(.*)\\\"(@\\w+)?").matcher(s);
|
|
if (matcher.find()) {
|
|
return matcher.group(1);
|
|
} else {
|
|
return s;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Creates an URL for thumbnail
|
|
*
|
|
* @param filename Thumbnail file name
|
|
* @return URL of thumbnail
|
|
*/
|
|
public static String makeThumbBaseUrl(@NonNull String filename) {
|
|
String name = new PageTitle(filename).getPrefixedText();
|
|
String sha = new String(Hex.encodeHex(DigestUtils.md5(name)));
|
|
return String.format("%s/%s/%s/%s", BuildConfig.IMAGE_URL_BASE, sha.substring(0, 1), sha.substring(0, 2), urlEncode(name));
|
|
}
|
|
|
|
/**
|
|
* URL Encode an URL in UTF-8 format
|
|
* @param url Unformatted URL
|
|
* @return Encoded URL
|
|
*/
|
|
public static String urlEncode(String url) {
|
|
try {
|
|
return URLEncoder.encode(url, "utf-8");
|
|
} catch (UnsupportedEncodingException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Capitalizes the first character of a string.
|
|
*
|
|
* @param string String to alter
|
|
* @return string with capitalized first character
|
|
*/
|
|
public static String capitalize(String string) {
|
|
return string.substring(0, 1).toUpperCase(Locale.getDefault()) + string.substring(1);
|
|
}
|
|
|
|
/**
|
|
* Generates licence name with given ID
|
|
* @param license License ID
|
|
* @return Name of license
|
|
*/
|
|
public static int licenseNameFor(String license) {
|
|
switch (license) {
|
|
case Prefs.Licenses.CC_BY_3:
|
|
return R.string.license_name_cc_by;
|
|
case Prefs.Licenses.CC_BY_4:
|
|
return R.string.license_name_cc_by_four;
|
|
case Prefs.Licenses.CC_BY_SA_3:
|
|
return R.string.license_name_cc_by_sa;
|
|
case Prefs.Licenses.CC_BY_SA_4:
|
|
return R.string.license_name_cc_by_sa_four;
|
|
case Prefs.Licenses.CC0:
|
|
return R.string.license_name_cc0;
|
|
case Prefs.Licenses.CC_BY: // for backward compatibility to v2.1
|
|
return R.string.license_name_cc_by_3_0;
|
|
case Prefs.Licenses.CC_BY_SA: // for backward compatibility to v2.1
|
|
return R.string.license_name_cc_by_sa_3_0;
|
|
}
|
|
throw new RuntimeException("Unrecognized license value: " + license);
|
|
}
|
|
|
|
/**
|
|
* Fixing incorrect extension
|
|
* @param title File name
|
|
* @param extension Correct extension
|
|
* @return File with correct extension
|
|
*/
|
|
public static String fixExtension(String title, String extension) {
|
|
Pattern jpegPattern = Pattern.compile("\\.jpeg$", Pattern.CASE_INSENSITIVE);
|
|
|
|
// People are used to ".jpg" more than ".jpeg" which the system gives us.
|
|
if (extension != null && extension.toLowerCase(Locale.ENGLISH).equals("jpeg")) {
|
|
extension = "jpg";
|
|
}
|
|
title = jpegPattern.matcher(title).replaceFirst(".jpg");
|
|
if (extension != null && !title.toLowerCase(Locale.getDefault())
|
|
.endsWith("." + extension.toLowerCase(Locale.ENGLISH))) {
|
|
title += "." + extension;
|
|
}
|
|
return title;
|
|
}
|
|
|
|
/**
|
|
* Tells whether dark theme is active or not
|
|
* @param context Activity context
|
|
* @return The state of dark theme
|
|
*/
|
|
public static boolean isDarkTheme(Context context) {
|
|
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("theme", false);
|
|
}
|
|
|
|
/**
|
|
* Will be used to fetch the logs generated by the app ever since the beginning of times....
|
|
* i.e. since the time the app started.
|
|
*
|
|
* @return String containing all the logs since the time the app started
|
|
*/
|
|
public static String getAppLogs() {
|
|
final String processId = Integer.toString(android.os.Process.myPid());
|
|
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
|
|
try {
|
|
String[] command = new String[] {"logcat","-d","-v","threadtime"};
|
|
|
|
Process process = Runtime.getRuntime().exec(command);
|
|
|
|
BufferedReader bufferedReader = new BufferedReader(
|
|
new InputStreamReader(process.getInputStream())
|
|
);
|
|
|
|
String line;
|
|
while ((line = bufferedReader.readLine()) != null) {
|
|
if (line.contains(processId)) {
|
|
stringBuilder.append(line);
|
|
}
|
|
}
|
|
} catch (IOException ioe) {
|
|
Timber.e("getAppLogs failed", ioe);
|
|
}
|
|
|
|
return stringBuilder.toString();
|
|
}
|
|
}
|