Commit 5f03ee56 authored by kenan's avatar kenan

SearchableListDialog

parent cf816b81
package cn.garymb.ygomobile.ui.adapters; package cn.garymb.ygomobile.ui.adapters;
import androidx.annotation.NonNull;
public class SimpleSpinnerItem { public class SimpleSpinnerItem {
public long value; public long value;
public String text; public String text;
public Object tag; public transient Object tag;
public SimpleSpinnerItem(long value, String text) { public SimpleSpinnerItem(long value, String text) {
this.value = value; this.value = value;
...@@ -20,8 +22,9 @@ public class SimpleSpinnerItem { ...@@ -20,8 +22,9 @@ public class SimpleSpinnerItem {
return this; return this;
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
return text; return "" + text;
} }
} }
...@@ -26,6 +26,7 @@ import cn.garymb.ygomobile.ui.adapters.SimpleSpinnerAdapter; ...@@ -26,6 +26,7 @@ import cn.garymb.ygomobile.ui.adapters.SimpleSpinnerAdapter;
import cn.garymb.ygomobile.ui.adapters.SimpleSpinnerItem; import cn.garymb.ygomobile.ui.adapters.SimpleSpinnerItem;
import cn.garymb.ygomobile.ui.plus.DialogPlus; import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.VUiKit; import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.ui.widget.SearchableSpinner;
import ocgcore.DataManager; import ocgcore.DataManager;
import ocgcore.LimitManager; import ocgcore.LimitManager;
import ocgcore.StringManager; import ocgcore.StringManager;
...@@ -55,7 +56,7 @@ public class CardSearcher implements View.OnClickListener { ...@@ -55,7 +56,7 @@ public class CardSearcher implements View.OnClickListener {
private final Spinner typeMonsterSpinner2; private final Spinner typeMonsterSpinner2;
private final Spinner typeSpellSpinner; private final Spinner typeSpellSpinner;
private final Spinner typeTrapSpinner; private final Spinner typeTrapSpinner;
private final Spinner setCodeSpinner; private final SearchableSpinner setCodeSpinner;
private final Spinner categorySpinner; private final Spinner categorySpinner;
private final Spinner raceSpinner; private final Spinner raceSpinner;
private final Spinner levelSpinner; private final Spinner levelSpinner;
...@@ -120,6 +121,7 @@ public class CardSearcher implements View.OnClickListener { ...@@ -120,6 +121,7 @@ public class CardSearcher implements View.OnClickListener {
resetButton.setOnClickListener(this); resetButton.setOnClickListener(this);
mCardLoader = dataLoader; mCardLoader = dataLoader;
// setCodeSpinner.setFirstIndex(1);
OnEditorActionListener searchListener = (v, actionId, event) -> { OnEditorActionListener searchListener = (v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_SEARCH) { if (actionId == EditorInfo.IME_ACTION_SEARCH) {
InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
...@@ -439,7 +441,7 @@ public class CardSearcher implements View.OnClickListener { ...@@ -439,7 +441,7 @@ public class CardSearcher implements View.OnClickListener {
private void initSetNameSpinners(Spinner spinner) { private void initSetNameSpinners(Spinner spinner) {
List<CardSet> setnames = mStringManager.getCardSets(); List<CardSet> setnames = mStringManager.getCardSets();
List<SimpleSpinnerItem> items = new ArrayList<>(); List<SimpleSpinnerItem> items = new ArrayList<>();
items.add(new SimpleSpinnerItem(0, getString(R.string.label_set))); items.add(new SimpleSpinnerItem(0, mContext.getString(R.string.label_set)));
for (CardSet set : setnames) { for (CardSet set : setnames) {
items.add(new SimpleSpinnerItem(set.getCode(), set.getName())); items.add(new SimpleSpinnerItem(set.getCode(), set.getName()));
} }
......
...@@ -142,6 +142,8 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie ...@@ -142,6 +142,8 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie
}; };
//x5内核初始化接口 //x5内核初始化接口
QbSdk.initX5Environment(this, cb); QbSdk.initX5Environment(this, cb);
if(!BuildConfig.BUILD_TYPE.equals("debug")) {
//release才检查版本
if (!Constants.ACTION_OPEN_GAME.equals(getIntent().getAction())) { if (!Constants.ACTION_OPEN_GAME.equals(getIntent().getAction())) {
Log.d(Constants.TAG, "start check update"); Log.d(Constants.TAG, "start check update");
//check update //check update
...@@ -149,6 +151,7 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie ...@@ -149,6 +151,7 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie
} else { } else {
Log.d(Constants.TAG, "skip check update"); Log.d(Constants.TAG, "skip check update");
} }
}
//初始化决斗助手 //初始化决斗助手
initDuelAssistant(); initDuelAssistant();
//萌卡 //萌卡
......
package cn.garymb.ygomobile.ui.widget; package cn.garymb.ygomobile.ui.widget;
import android.app.Dialog; import android.app.Activity;
import android.app.DialogFragment;
import android.app.SearchManager; import android.app.SearchManager;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.ListView; import android.widget.ListView;
import android.widget.SearchView; import android.widget.SearchView;
import android.widget.TextView; import android.widget.TextView;
import java.io.Serializable; import java.util.ArrayList;
import java.util.List; import java.util.List;
import cn.garymb.ygomobile.lite.R; import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.plus.DialogPlus; import cn.garymb.ygomobile.ui.plus.DialogPlus;
public class SearchableListDialog extends DialogFragment implements public class SearchableListDialog extends DialogPlus implements
SearchView.OnQueryTextListener, SearchView.OnCloseListener { SearchView.OnQueryTextListener, SearchView.OnCloseListener {
private static final String ITEMS = "items"; private final ArrayAdapter<Object> listAdapter;
private onSearchItemClickListener _onSearchItemClickListener;
private ArrayAdapter listAdapter;
private ListView _listViewItems;
private SearchableItem _searchableItem;
private OnSearchTextChanged _onSearchTextChanged; private OnSearchTextChanged _onSearchTextChanged;
private final SearchView _searchView;
private final List<Object> items = new ArrayList<>();
private SearchView _searchView; public SearchableListDialog(Context context) {
super(context);
private String _strTitle; LayoutInflater inflater = LayoutInflater.from(context);
private String _strPositiveButtonText;
private DialogInterface.OnClickListener _onClickListener;
public SearchableListDialog() {
}
public static SearchableListDialog newInstance(List items) {
SearchableListDialog multiSelectExpandableFragment = new
SearchableListDialog();
Bundle args = new Bundle();
args.putSerializable(ITEMS, (Serializable) items);
multiSelectExpandableFragment.setArguments(args);
return multiSelectExpandableFragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams
.SOFT_INPUT_STATE_HIDDEN);
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Getting the layout inflater to inflate the view in an alert dialog.
LayoutInflater inflater = LayoutInflater.from(getActivity());
// Crash on orientation change #7
// Change Start
// Description: As the instance was re initializing to null on rotating the device,
// getting the instance from the saved instance
if (null != savedInstanceState) {
_searchableItem = (SearchableItem) savedInstanceState.getSerializable("item");
}
// Change End
View rootView = inflater.inflate(R.layout.searchable_list_dialog, null); View rootView = inflater.inflate(R.layout.searchable_list_dialog, null);
setData(rootView); SearchManager searchManager = (SearchManager)context.getSystemService(Context.SEARCH_SERVICE);
DialogPlus alertDialog = new DialogPlus(getActivity());
alertDialog.setContentView(rootView);
alertDialog.hideButton();
String strTitle = _strTitle == null ? "Select Item" : _strTitle;
alertDialog.setTitle(strTitle);
alertDialog.show();
alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams
.SOFT_INPUT_STATE_HIDDEN);
return alertDialog;
}
// Crash on orientation change #7
// Change Start
// Description: Saving the instance of searchable item instance.
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putSerializable("item", _searchableItem);
super.onSaveInstanceState(outState);
}
// Change End
public void setTitle(String strTitle) {
_strTitle = strTitle;
}
public void setPositiveButton(String strPositiveButtonText) {
_strPositiveButtonText = strPositiveButtonText;
}
public void setPositiveButton(String strPositiveButtonText, DialogInterface.OnClickListener onClickListener) {
_strPositiveButtonText = strPositiveButtonText;
_onClickListener = onClickListener;
}
public void setOnSearchableItemClickListener(SearchableItem searchableItem) {
this._searchableItem = searchableItem;
}
public void setOnSearchTextChangedListener(OnSearchTextChanged onSearchTextChanged) {
this._onSearchTextChanged = onSearchTextChanged;
}
private void setData(View rootView) {
SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context
.SEARCH_SERVICE);
_searchView = (SearchView) rootView.findViewById(R.id.search); _searchView = (SearchView) rootView.findViewById(R.id.search);
_searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName if(context instanceof Activity) {
())); _searchView.setSearchableInfo(searchManager
.getSearchableInfo(((Activity)context).getComponentName()));
}
_searchView.setIconifiedByDefault(false); _searchView.setIconifiedByDefault(false);
_searchView.setOnQueryTextListener(this); _searchView.setOnQueryTextListener(this);
_searchView.setOnCloseListener(this); _searchView.setOnCloseListener(this);
_searchView.clearFocus(); _searchView.clearFocus();
int id = _searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); int id = _searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
TextView textView1 = (TextView) _searchView.findViewById(id); TextView textView1 = (TextView) _searchView.findViewById(id);
textView1.setTextColor(Color.parseColor("#ff8800")); if(textView1 != null) {
InputMethodManager mgr = (InputMethodManager) getActivity().getSystemService(Context textView1.setTextColor(getContext().getResources().getColor(R.color.search_text_color));
.INPUT_METHOD_SERVICE); }
mgr.hideSoftInputFromWindow(_searchView.getWindowToken(), 0); ListView _listViewItems = (ListView) rootView.findViewById(R.id.listItems);
List items = (List) getArguments().getSerializable(ITEMS);
_listViewItems = (ListView) rootView.findViewById(R.id.listItems);
//create the adapter by passing your ArrayList data listAdapter = new ArrayAdapter<Object>(context, android.R.layout.simple_list_item_1, items) {
/*listAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1,
items);*/
listAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, items) {
@Override @Override
public View getView(int position, View convertView, ViewGroup parent) { public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = (TextView) super.getView(position, convertView, parent); TextView textView = (TextView) super.getView(position, convertView, parent);
textView.setTextColor(Color.parseColor("#b8be35")); textView.setTextColor(getContext().getResources().getColor(R.color.search_list_item_color));
return textView; return textView;
} }
}; };
//attach the adapter to the list //attach the adapter to the list
_listViewItems.setAdapter(listAdapter); _listViewItems.setAdapter(listAdapter);
_listViewItems.setTextFilterEnabled(true); _listViewItems.setTextFilterEnabled(true);
_listViewItems.setOnItemClickListener((parent, view, position, id1) -> {
if(_onSearchItemClickListener != null) {
_onSearchItemClickListener.onSearchableItemClicked(listAdapter.getItem(position), position);
}
this.dismiss();
});
setContentView(rootView);
hideButton();
}
_listViewItems.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { public void show() {
_searchableItem.onSearchableItemClicked(listAdapter.getItem(position), position); super.show();
getDialog().dismiss(); getWindow().setSoftInputMode(WindowManager.LayoutParams
.SOFT_INPUT_STATE_HIDDEN);
} }
});
public void show(List<Object> items){
//隐藏输入法
InputMethodManager mgr = (InputMethodManager) getContext().getSystemService(Context
.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(_searchView.getWindowToken(), 0);
//设置列表
this.items.clear();
this.items.addAll(items);
listAdapter.notifyDataSetChanged();
show();
}
public void setOnSearchableItemClickListener(onSearchItemClickListener onSearchItemClickListener) {
this._onSearchItemClickListener = onSearchItemClickListener;
}
public void setOnSearchTextChangedListener(OnSearchTextChanged onSearchTextChanged) {
this._onSearchTextChanged = onSearchTextChanged;
} }
@Override @Override
...@@ -198,12 +112,10 @@ public class SearchableListDialog extends DialogFragment implements ...@@ -198,12 +112,10 @@ public class SearchableListDialog extends DialogFragment implements
@Override @Override
public boolean onQueryTextChange(String s) { public boolean onQueryTextChange(String s) {
// listAdapter.filterData(s);
if (TextUtils.isEmpty(s)) { if (TextUtils.isEmpty(s)) {
// _listViewItems.clearTextFilter(); listAdapter.getFilter().filter(null);
((ArrayAdapter) _listViewItems.getAdapter()).getFilter().filter(null);
} else { } else {
((ArrayAdapter) _listViewItems.getAdapter()).getFilter().filter(s); listAdapter.getFilter().filter(s);
} }
if (null != _onSearchTextChanged) { if (null != _onSearchTextChanged) {
_onSearchTextChanged.onSearchTextChanged(s); _onSearchTextChanged.onSearchTextChanged(s);
...@@ -211,8 +123,8 @@ public class SearchableListDialog extends DialogFragment implements ...@@ -211,8 +123,8 @@ public class SearchableListDialog extends DialogFragment implements
return true; return true;
} }
public interface SearchableItem<T> extends Serializable { public interface onSearchItemClickListener {
void onSearchableItemClicked(T item, int position); void onSearchableItemClicked(Object item, int position);
} }
public interface OnSearchTextChanged { public interface OnSearchTextChanged {
......
...@@ -3,7 +3,6 @@ package cn.garymb.ygomobile.ui.widget; ...@@ -3,7 +3,6 @@ package cn.garymb.ygomobile.ui.widget;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.ContextWrapper; import android.content.ContextWrapper;
import android.content.DialogInterface;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.AttributeSet; import android.util.AttributeSet;
...@@ -16,34 +15,35 @@ import android.widget.SpinnerAdapter; ...@@ -16,34 +15,35 @@ import android.widget.SpinnerAdapter;
import androidx.appcompat.widget.AppCompatSpinner; import androidx.appcompat.widget.AppCompatSpinner;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import cn.garymb.ygomobile.lite.R; import cn.garymb.ygomobile.lite.R;
public class SearchableSpinner extends AppCompatSpinner implements View.OnTouchListener, public class SearchableSpinner extends AppCompatSpinner implements View.OnTouchListener,
SearchableListDialog.SearchableItem { SearchableListDialog.onSearchItemClickListener {
public static final int NO_ITEM_SELECTED = -1; public static final int NO_ITEM_SELECTED = -1;
private Context _context;
private List _items;
private SearchableListDialog _searchableListDialog; private SearchableListDialog _searchableListDialog;
private final ArrayList<Object> _items = new ArrayList<>();
private boolean _isDirty; private boolean _isDirty;
private BaseAdapter _arrayAdapter; private BaseAdapter _arrayAdapter;
private String _strHintText; private String _strHintText;
private boolean _isFromInit; private boolean _isFromInit;
private String mTitleString = "Select Item"; private String mTitleString = "Select Item";
private int mFirstIndex = 0;
public SearchableSpinner(Context context) { public SearchableSpinner(Context context) {
super(context); this(context, null);
this._context = context;
init();
} }
public SearchableSpinner(Context context, AttributeSet attrs) { public SearchableSpinner(Context context, AttributeSet attrs) {
super(context, attrs); this(context, attrs, 0);
this._context = context; }
public SearchableSpinner(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SearchableSpinner); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SearchableSpinner);
if (a != null) {
final int N = a.getIndexCount(); final int N = a.getIndexCount();
for (int i = 0; i < N; ++i) { for (int i = 0; i < N; ++i) {
int attr = a.getIndex(i); int attr = a.getIndex(i);
...@@ -54,50 +54,42 @@ public class SearchableSpinner extends AppCompatSpinner implements View.OnTouchL ...@@ -54,50 +54,42 @@ public class SearchableSpinner extends AppCompatSpinner implements View.OnTouchL
} }
} }
a.recycle(); a.recycle();
init();
} }
public SearchableSpinner(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this._context = context;
init(); init();
} }
private void init() { private void init() {
_items = new ArrayList(); _searchableListDialog = new SearchableListDialog(getContext());
_searchableListDialog = SearchableListDialog.newInstance
(_items);
_searchableListDialog.setTitle(mTitleString); _searchableListDialog.setTitle(mTitleString);
_searchableListDialog.setOnSearchableItemClickListener(this); _searchableListDialog.setOnSearchableItemClickListener(this);
setOnTouchListener(this); setOnTouchListener(this);
_arrayAdapter = (BaseAdapter) getAdapter(); _arrayAdapter = (BaseAdapter) getAdapter();
if (!TextUtils.isEmpty(_strHintText)) { if (!TextUtils.isEmpty(_strHintText)) {
ArrayAdapter arrayAdapter = new ArrayAdapter(_context, android.R.layout ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getContext(),
.simple_list_item_1, new String[]{_strHintText}); android.R.layout.simple_list_item_1,
new String[]{_strHintText});
_isFromInit = true; _isFromInit = true;
setAdapter(arrayAdapter); setAdapter(arrayAdapter);
} }
} }
public void setFirstIndex(int firstIndex) {
this.mFirstIndex = firstIndex;
}
@Override @Override
public boolean onTouch(View v, MotionEvent event) { public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) { if (event.getAction() == MotionEvent.ACTION_UP) {
if (null != _arrayAdapter) { if (null != _arrayAdapter) {
// Refresh content #6
// Change Start
// Description: The items were only set initially, not reloading the data in the
// spinner every time it is loaded with items in the adapter.
// Change end.
//修复 重复点击 bug //修复 重复点击 bug
if (!_searchableListDialog.isAdded()) { if(!_searchableListDialog.isShowing()) {
_items.clear(); _items.clear();
for (int i = 0; i < _arrayAdapter.getCount(); i++) { int N = _arrayAdapter.getCount();
for (int i = mFirstIndex; i < N; i++) {
_items.add(_arrayAdapter.getItem(i)); _items.add(_arrayAdapter.getItem(i));
} }
_searchableListDialog.show(scanForActivity(_context).getFragmentManager(), "TAG"); _searchableListDialog.show(_items);
} }
} }
} }
...@@ -109,7 +101,7 @@ public class SearchableSpinner extends AppCompatSpinner implements View.OnTouchL ...@@ -109,7 +101,7 @@ public class SearchableSpinner extends AppCompatSpinner implements View.OnTouchL
if (!_isFromInit) { if (!_isFromInit) {
_arrayAdapter = (BaseAdapter) adapter; _arrayAdapter = (BaseAdapter) adapter;
if (!TextUtils.isEmpty(_strHintText) && !_isDirty) { if (!TextUtils.isEmpty(_strHintText) && !_isDirty) {
ArrayAdapter arrayAdapter = new ArrayAdapter(_context, android.R.layout ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getContext(), android.R.layout
.simple_list_item_1, new String[]{_strHintText}); .simple_list_item_1, new String[]{_strHintText});
super.setAdapter(arrayAdapter); super.setAdapter(arrayAdapter);
} else { } else {
...@@ -124,8 +116,7 @@ public class SearchableSpinner extends AppCompatSpinner implements View.OnTouchL ...@@ -124,8 +116,7 @@ public class SearchableSpinner extends AppCompatSpinner implements View.OnTouchL
@Override @Override
public void onSearchableItemClicked(Object item, int position) { public void onSearchableItemClicked(Object item, int position) {
setSelection(_items.indexOf(item)); setSelection(_items.indexOf(item) + mFirstIndex);
if (!_isDirty) { if (!_isDirty) {
_isDirty = true; _isDirty = true;
setAdapter(_arrayAdapter); setAdapter(_arrayAdapter);
...@@ -137,14 +128,6 @@ public class SearchableSpinner extends AppCompatSpinner implements View.OnTouchL ...@@ -137,14 +128,6 @@ public class SearchableSpinner extends AppCompatSpinner implements View.OnTouchL
_searchableListDialog.setTitle(strTitle); _searchableListDialog.setTitle(strTitle);
} }
public void setPositiveButton(String strPositiveButtonText) {
_searchableListDialog.setPositiveButton(strPositiveButtonText);
}
public void setPositiveButton(String strPositiveButtonText, DialogInterface.OnClickListener onClickListener) {
_searchableListDialog.setPositiveButton(strPositiveButtonText, onClickListener);
}
public void setOnSearchTextChangedListener(SearchableListDialog.OnSearchTextChanged onSearchTextChanged) { public void setOnSearchTextChangedListener(SearchableListDialog.OnSearchTextChanged onSearchTextChanged) {
_searchableListDialog.setOnSearchTextChangedListener(onSearchTextChanged); _searchableListDialog.setOnSearchTextChangedListener(onSearchTextChanged);
} }
......
...@@ -29,4 +29,7 @@ ...@@ -29,4 +29,7 @@
<color name="colorMain">#2196F3</color> <color name="colorMain">#2196F3</color>
<color name="background">#ECEFF1</color> <color name="background">#ECEFF1</color>
<color name="transparent">#00000000</color> <color name="transparent">#00000000</color>
<color name="search_text_color">#ff8800</color>
<color name="search_list_item_color">#b8be35</color>
</resources> </resources>
\ No newline at end of file
...@@ -328,4 +328,5 @@ ...@@ -328,4 +328,5 @@
<string name="label_ot_SC_OCG">SChinese OCG</string> <string name="label_ot_SC_OCG">SChinese OCG</string>
<string name="settings_screen_padding">Reserved height of curved screen</string> <string name="settings_screen_padding">Reserved height of curved screen</string>
<string name="tip_load_cdb_error">加载数据出错</string> <string name="tip_load_cdb_error">加载数据出错</string>
<string name="text_none" translatable="false">N/A</string>
</resources> </resources>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment