136 lines
4.6 KiB
Java
136 lines
4.6 KiB
Java
package com.assimilate.alltrans.common;
|
|
|
|
import android.content.Context;
|
|
import android.net.Uri;
|
|
import android.text.TextUtils;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import com.assimilate.alltrans.R;
|
|
import com.google.gson.Gson;
|
|
import com.google.gson.reflect.TypeToken;
|
|
|
|
import java.io.BufferedReader;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.InputStreamReader;
|
|
import java.lang.reflect.Type;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Objects;
|
|
|
|
public class LanguagesConstants {
|
|
private static boolean instanced = false;
|
|
private volatile static LanguagesConstants languagesConstant;
|
|
|
|
private final ArrayList<Language> languages;
|
|
|
|
private LanguagesConstants() {
|
|
synchronized (LanguagesConstants.class) {
|
|
if (instanced) {
|
|
throw new RuntimeException("Instance multiple LanguagesConstants.");
|
|
} else {
|
|
languages = new ArrayList<Language>();
|
|
instanced = true;
|
|
}
|
|
|
|
if(languagesConstant != null) {
|
|
throw new RuntimeException("looper error(LanguagesConstants instanced).");
|
|
}
|
|
}
|
|
}
|
|
|
|
public static LanguagesConstants getInstance() {
|
|
if (null == languagesConstant) {
|
|
synchronized (LanguagesConstants.class) {
|
|
if (null == languagesConstant) {
|
|
languagesConstant = new LanguagesConstants();
|
|
}
|
|
}
|
|
}
|
|
return languagesConstant;
|
|
}
|
|
|
|
public ArrayList<Language> getList(@NonNull final Context context) {
|
|
if (languages.isEmpty()) {
|
|
getLanguages(context);
|
|
}
|
|
return languages;
|
|
}
|
|
|
|
private void getLanguages(final Context context) {
|
|
InputStream inputStream = null;
|
|
InputStreamReader inputStreamReader = null;
|
|
BufferedReader bufferedReader = null;
|
|
try {
|
|
// step1. 获得语言文件的输入流
|
|
inputStream = context.getResources().openRawResource(R.raw.languages);
|
|
inputStreamReader = new InputStreamReader(inputStream);
|
|
bufferedReader = new BufferedReader(inputStreamReader);
|
|
|
|
// step2. 读取json文件信息
|
|
final StringBuilder builder = new StringBuilder();
|
|
String line = null;
|
|
while ((line = bufferedReader.readLine()) != null) {
|
|
builder.append(line);
|
|
}
|
|
|
|
// step3. 将json文本转换成Java对象
|
|
final String result = builder.toString();
|
|
if (!TextUtils.isEmpty(result)) {
|
|
Gson gson = new Gson();
|
|
Type listType = new TypeToken<List<Language>>(){}.getType();
|
|
|
|
List<Language> temp = gson.fromJson(result, listType);
|
|
if (null != temp && !temp.isEmpty()) {
|
|
languages.clear();
|
|
for (Language iLanguage : temp) {
|
|
iLanguage.mFlagUrl = getLanguageFlag(context, iLanguage.getLanguageCode());
|
|
}
|
|
languages.addAll(temp);
|
|
}
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
throw new RuntimeException(e);
|
|
} finally {
|
|
if (null != bufferedReader) {
|
|
try {
|
|
bufferedReader.close();
|
|
} catch (IOException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
if (null != inputStreamReader) {
|
|
try {
|
|
inputStreamReader.close();
|
|
} catch (IOException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
if (null != inputStream) {
|
|
try {
|
|
inputStream.close();
|
|
} catch (IOException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
Logger.d("log", "Load languages from configuration successfully.");
|
|
}
|
|
}
|
|
|
|
private String getLanguageFlag(final Context context, final String languageCode) {
|
|
final String folderName = Objects.requireNonNull(R.class.getPackage()).getName();
|
|
if (TextUtils.isEmpty(languageCode) || TextUtils.isEmpty(folderName)) {
|
|
return null;
|
|
} else {
|
|
int drawableResourceId = context.getResources().getIdentifier("z_" + languageCode, "mipmap", context.getPackageName());
|
|
if (0 != drawableResourceId) {
|
|
return Uri.parse("android.resource://" + folderName + "/" + drawableResourceId).toString();
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
}
|