Commit a0f08346 authored by kenan's avatar kenan

同步master

parent 66a1d319
......@@ -1065,7 +1065,7 @@ void Game::DrawSpec() {
void Game::DrawBackImage(irr::video::ITexture* texture) {
if(!texture)
return;
driver->draw2DImage(texture, recti(0, 0, 1024 * mainGame->xScale, 640 * mainGame->yScale), recti(0, 0, texture->getOriginalSize().Width, texture->getOriginalSize().Height));
driver->draw2DImage(texture, recti(0, 0, GAME_WIDTH * mainGame->xScale, GAME_HEIGHT * mainGame->yScale), recti(0, 0, texture->getOriginalSize().Width, texture->getOriginalSize().Height));
}
void Game::ShowElement(irr::gui::IGUIElement * win, int autoframe) {
FadingUnit fu;
......
......@@ -2010,8 +2010,8 @@ void ClientField::GetHoverField(int x, int y) {
hovered_sequence = hc - 1 - (x - ofRect.UpperLeftCorner.X) * (hc - 1) / ((cardSize + cardSpace) * 5 * mainGame->xScale);
}
} else {
double screenx = x / (1024.0 * mainGame->xScale) * 1.35 - 0.90;
double screeny = y / (640.0 * mainGame->yScale) * 0.84 - 0.42;
double screenx = x / (GAME_WIDTH * mainGame->xScale) * 1.35 - 0.90;
double screeny = y / (GAME_HEIGHT * mainGame->yScale) * 0.84 - 0.42;
double angle = 0.798056 - atan(screeny); //0.798056 = arctan(8.0/7.8)
double vlen = sqrt(1.0 + screeny * screeny);
double boardx = 4.2 + 7.8 * screenx / vlen / cos(angle);
......@@ -2308,7 +2308,7 @@ void ClientField::ShowCardInfoInList(ClientCard* pcard, irr::gui::IGUIElement* e
x = w + 10 * mainGame->xScale;
if(x + w > 670 * mainGame->xScale)
x = 670 * mainGame->xScale - w;
mainGame->stCardListTip->setRelativePosition(recti(x - dTip.Width / 2, y - 10, x + dTip.Width / 2, y - 10 + dTip.Height));
mainGame->stCardListTip->setRelativePosition(recti(x - dTip.Width / 2, y - 10 * mainGame->yScale, x + dTip.Width / 2, y - 10 * mainGame->yScale + dTip.Height));
mainGame->stCardListTip->setVisible(true);
}
}
......
......@@ -47,19 +47,6 @@ bool Game::Initialize() {
#endif
srand(time(0));
irr::SIrrlichtCreationParameters params = irr::SIrrlichtCreationParameters();
int screenH = static_cast<int>(android::getScreenHeight(app));
int screenW = static_cast<int>(android::getScreenWidth(app));
float sH = static_cast<float>(screenH / 1024.0);
float sW = static_cast<float>(screenW / 640.0);
//取最小值
if(sH < sW){
xScale = sH;
yScale = sH;
} else {
xScale = sW;
yScale = sW;
}
#ifdef _IRR_ANDROID_PLATFORM_
android::InitOptions *options = android::getInitOptions(app);
......@@ -73,13 +60,7 @@ bool Game::Initialize() {
params.Bits = 24;
params.ZBufferBits = 16;
params.AntiAlias = 0;
//int w = (int)(1024.0*xScale);
//int h = (int)(640.0*yScale);
params.WindowSize = irr::core::dimension2d<u32>(0, 0);
//每一个元素得left和top都需要改
//xStart = (float)((screenH - w)/2.0);
//yStart = (float)((screenW - h)/2.0);
//params.WindowPosition = core::position2di((s32)xStart, (s32)yStart);
#else
if(gameConf.use_d3d)
params.DriverType = irr::video::EDT_DIRECT3D9;
......@@ -92,12 +73,13 @@ bool Game::Initialize() {
if(!device)
return false;
#ifdef _IRR_ANDROID_PLATFORM_
device->setProcessReceiver(this);
if (!android::perfromTrick(app)) {
return false;
}
core::position2di appPosition = android::initJavaBridge(app, device);
setPositionFix(appPosition);
device->setProcessReceiver(this);
soundEffectPlayer = new AndroidSoundEffectPlayer(app);
soundEffectPlayer->setSEEnabled(options->isSoundEffectEnabled());
......@@ -107,10 +89,10 @@ bool Game::Initialize() {
isPSEnabled = options->isPendulumScaleEnabled();
dataManager.FileSystem = device->getFileSystem();
/* if (xScale < yScale) {
* xScale = android::getScreenWidth(app) / 1024.0;
* yScale = android::getScreenHeight(app) / 640.0;
* }//start ygocore when mobile is in landscape mode, or using Android tablets or TV.*/
xScale = android::getXScale(app);
yScale = android::getYScale(app);
//start ygocore when mobile is in landscape mode, or using Android tablets or TV.
char log_scale[256] = {0};
sprintf(log_scale, "xScale = %f, yScale = %f", xScale, yScale);
Printer::log(log_scale);
......
......@@ -529,6 +529,7 @@ public:
irr::gui::IGUIButton* btnCancelOrFinish;
float xScale;
float yScale;
IYGOSoundEffectPlayer* soundEffectPlayer;
#ifdef _IRR_ANDROID_PLATFORM_
ANDROID_APP appMain;
......@@ -755,6 +756,14 @@ private:
#define CARD_ARTWORK_VERSIONS_OFFSET 10
#ifdef _IRR_ANDROID_PLATFORM_
#define GAME_WIDTH 1024
#define GAME_HEIGHT 640
#else
#define GAME_WIDTH 1280
#define GAME_HEIGHT 720
#endif
#ifdef _IRR_ANDROID_PLATFORM_
#define GUI_INFO_FPS 1000
#endif
......
......@@ -356,7 +356,53 @@ irr::io::path getResourcePath(ANDROID_APP app) {
return ret;
}
float getXScale(ANDROID_APP app){
float ret = 1;
if (!app || !app->activity || !app->activity->vm)
return ret;
JNIEnv* jni = 0;
app->activity->vm->AttachCurrentThread(&jni, NULL);
if (!jni)
return ret;
// Retrieves NativeActivity.
jobject lNativeActivity = app->activity->clazz;
jclass ClassNativeActivity = jni->GetObjectClass(lNativeActivity);
jmethodID MethodGetApp = jni->GetMethodID(ClassNativeActivity,
"getApplication", "()Landroid/app/Application;");
jobject application = jni->CallObjectMethod(lNativeActivity, MethodGetApp);
jclass classApp = jni->GetObjectClass(application);
jmethodID glversionMethod = jni->GetMethodID(classApp, "getXScale",
"()F");
ret = jni->CallFloatMethod(application, glversionMethod);
jni->DeleteLocalRef(classApp);
jni->DeleteLocalRef(ClassNativeActivity);
app->activity->vm->DetachCurrentThread();
return ret;
}
float getYScale(ANDROID_APP app){
float ret = 1;
if (!app || !app->activity || !app->activity->vm)
return ret;
JNIEnv* jni = 0;
app->activity->vm->AttachCurrentThread(&jni, NULL);
if (!jni)
return ret;
// Retrieves NativeActivity.
jobject lNativeActivity = app->activity->clazz;
jclass ClassNativeActivity = jni->GetObjectClass(lNativeActivity);
jmethodID MethodGetApp = jni->GetMethodID(ClassNativeActivity,
"getApplication", "()Landroid/app/Application;");
jobject application = jni->CallObjectMethod(lNativeActivity, MethodGetApp);
jclass classApp = jni->GetObjectClass(application);
jmethodID glversionMethod = jni->GetMethodID(classApp, "getYScale",
"()F");
ret = jni->CallFloatMethod(application, glversionMethod);
jni->DeleteLocalRef(classApp);
jni->DeleteLocalRef(ClassNativeActivity);
app->activity->vm->DetachCurrentThread();
return ret;
}
//Retrive last deck name.
irr::io::path getLastDeck(ANDROID_APP app) {
......
......@@ -141,6 +141,10 @@ extern int getCardQuality(ANDROID_APP app);
//Retrive local ip address(mostly for wifi only);
extern int getLocalAddr(ANDROID_APP app);
extern float getXScale(ANDROID_APP app);
extern float getYScale(ANDROID_APP app);
//Retrive font path.
extern irr::io::path getFontPath(ANDROID_APP app);
......
......@@ -53,6 +53,16 @@ public abstract class GameApplication extends Application implements IrrlichtBri
isInitSoundEffectPool = initSoundEffectPool;
}
public int getGameWidth(){
return 1024;
}
public int getGameHeight(){
return 640;
}
public abstract boolean isKeepScale();
@SuppressWarnings("deprecation")
public void initSoundEffectPool() {
mSoundEffectPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);
......@@ -75,10 +85,6 @@ public abstract class GameApplication extends Application implements IrrlichtBri
public abstract float getSmallerSize();
public abstract float getXScale();
public abstract float getYScale();
public abstract boolean isLockSreenOrientation();
public abstract boolean isSensorRefresh();
......
......@@ -84,6 +84,7 @@ public class YGOMobileActivity extends NativeActivity implements
private FrameLayout mLayout;
private SurfaceView mSurfaceView;
private boolean replaced = false;
private static boolean USE_SURFACE = true;
// public static int notchHeight;
......@@ -105,7 +106,9 @@ public class YGOMobileActivity extends NativeActivity implements
@SuppressWarnings("WrongConstant")
@Override
protected void onCreate(Bundle savedInstanceState) {
mSurfaceView = new SurfaceView(this);
if(USE_SURFACE) {
mSurfaceView = new SurfaceView(this);
}
super.onCreate(savedInstanceState);
Log.e("YGOStarter","跳转完成"+System.currentTimeMillis());
mFullScreenUtils = new FullScreenUtils(this, app().isImmerSiveMode());
......@@ -218,28 +221,24 @@ public class YGOMobileActivity extends NativeActivity implements
if (app().isImmerSiveMode()) {
mFullScreenUtils.fullscreen();
app().attachGame(this);
changeGameSize();
if (USE_SURFACE) {
changeGameSize();
} else {
int[] size = getGameSize();
if (app().isKeepScale()) {
getWindow().setLayout(size[0], size[1]);
}
}
}
}
private int[] getGameSize(){
//调整padding
float screenW = app().getScreenWidth();
float screenH = app().getScreenHeight();
float sH = screenH / 1024.0f;
float sW = screenW / 640.0f;
float xScale,yScale;
//取最小值
if(sH < sW){
xScale = sH;
yScale = sH;
} else {
xScale = sW;
yScale = sW;
}
int w = (int)(1024.0*xScale);
int h = (int) (640.0 * yScale);
float xScale = app().getXScale();
float yScale = app().getYScale();
int w = (int) (app().getGameWidth() * xScale);
int h = (int) (app().getGameHeight() * yScale);
Log.i("kk", "w1=" + app().getGameWidth() + ",h1=" + app().getGameHeight() + ",w2=" + w + ",h2=" + h + ",xScale=" + xScale + ",yScale=" + yScale);
return new int[]{w, h};
}
......@@ -259,21 +258,28 @@ public class YGOMobileActivity extends NativeActivity implements
@Override
public void setContentView(View view) {
mLayout = new FrameLayout(this);
int[] size = getGameSize();
int w = size[0];
int h = size[1];
mLayout = new FrameLayout(this);
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(w, h);
lp.gravity = Gravity.CENTER;
mLayout.addView(mSurfaceView, lp);
mLayout.addView(view, lp);
super.setContentView(mLayout);
app().attachGame(this);
changeGameSize();
getWindow().takeSurface(null);
replaced = true;
mSurfaceView.getHolder().addCallback(this);
mSurfaceView.requestFocus();
if (USE_SURFACE) {
mLayout.addView(mSurfaceView, lp);
mLayout.addView(view, lp);
super.setContentView(mLayout);
app().attachGame(this);
changeGameSize();
getWindow().takeSurface(null);
replaced = true;
mSurfaceView.getHolder().addCallback(this);
mSurfaceView.requestFocus();
} else {
mLayout.addView(view, lp);
getWindow().setLayout(w, h);
getWindow().setGravity(Gravity.CENTER);
super.setContentView(mLayout);
}
}
private void changeGameSize(){
......@@ -479,32 +485,40 @@ public class YGOMobileActivity extends NativeActivity implements
@Override
public void surfaceCreated(SurfaceHolder holder) {
if(!replaced){
return;
if(USE_SURFACE) {
if (!replaced) {
return;
}
}
super.surfaceCreated(holder);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if(!replaced){
return;
if(USE_SURFACE) {
if (!replaced) {
return;
}
}
super.surfaceChanged(holder, format, width, height);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if(!replaced){
return;
if(USE_SURFACE) {
if (!replaced) {
return;
}
}
super.surfaceDestroyed(holder);
}
@Override
public void surfaceRedrawNeeded(SurfaceHolder holder) {
if(!replaced){
return;
if(USE_SURFACE) {
if (!replaced) {
return;
}
}
super.surfaceRedrawNeeded(holder);
}
......
......@@ -177,6 +177,10 @@ public final class IrrlichtBridge {
void runWindbot(String args);
float getXScale();
float getYScale();
// float getSmallerSize();
// float getXScale();
// float getYScale();
......
......@@ -4,7 +4,6 @@ package cn.garymb.ygomobile;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatDelegate;
......@@ -54,12 +53,12 @@ public class App extends GameApplication {
@Override
public float getXScale() {
return AppsSettings.get().getXScale();
return AppsSettings.get().getXScale(getGameWidth(), getGameHeight());
}
@Override
public float getYScale() {
return AppsSettings.get().getYScale();
return AppsSettings.get().getYScale(getGameWidth(), getGameHeight());
}
@Override
......@@ -72,6 +71,10 @@ public class App extends GameApplication {
return AppsSettings.get().getFontPath();
}
@Override
public boolean isKeepScale() {
return AppsSettings.get().isKeepScale();
}
@Override
public void saveSetting(String key, String value) {
......
package cn.garymb.ygomobile;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.graphics.Point;
import android.os.Environment;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.WindowManager;
......@@ -14,7 +12,6 @@ import org.json.JSONArray;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
......@@ -23,15 +20,14 @@ import java.util.Locale;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.preference.PreferenceFragmentPlus;
import cn.garymb.ygomobile.utils.DeckUtil;
import cn.garymb.ygomobile.utils.FileLogUtil;
import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.SystemUtils;
import static cn.garymb.ygomobile.Constants.CORE_DECK_PATH;
import static cn.garymb.ygomobile.Constants.CORE_EXPANSIONS;
import static cn.garymb.ygomobile.Constants.CORE_PACK_PATH;
import static cn.garymb.ygomobile.Constants.CORE_SYSTEM_PATH;
import static cn.garymb.ygomobile.Constants.DEF_PREF_FONT_SIZE;
import static cn.garymb.ygomobile.Constants.DEF_PREF_KEEP_SCALE;
import static cn.garymb.ygomobile.Constants.DEF_PREF_NOTCH_HEIGHT;
import static cn.garymb.ygomobile.Constants.DEF_PREF_ONLY_GAME;
import static cn.garymb.ygomobile.Constants.DEF_PREF_READ_EX;
......@@ -39,6 +35,7 @@ import static cn.garymb.ygomobile.Constants.PREF_DEF_IMMERSIVE_MODE;
import static cn.garymb.ygomobile.Constants.PREF_DEF_SENSOR_REFRESH;
import static cn.garymb.ygomobile.Constants.PREF_FONT_SIZE;
import static cn.garymb.ygomobile.Constants.PREF_IMMERSIVE_MODE;
import static cn.garymb.ygomobile.Constants.PREF_KEEP_SCALE;
import static cn.garymb.ygomobile.Constants.PREF_LOCK_SCREEN;
import static cn.garymb.ygomobile.Constants.PREF_NOTCH_HEIGHT;
import static cn.garymb.ygomobile.Constants.PREF_ONLY_GAME;
......@@ -53,8 +50,9 @@ public class AppsSettings {
private static AppsSettings sAppsSettings;
private Context context;
private PreferenceFragmentPlus.SharedPreferencesPlus mSharedPreferences;
private float mScreenHeight, mScreenWidth, mDensity;
private float mDensity;
private final Point mScreenSize = new Point();
private final Point mRealScreenSize = new Point();
private AppsSettings(Context context) {
this.context = context;
......@@ -78,64 +76,13 @@ public class AppsSettings {
return new File(getResourcePath(), CORE_SYSTEM_PATH);
}
private static float getScale(float srcWidth, float srcHeight, float destWidth, float destHeight) {
float sx = srcWidth / destWidth;
float sy = srcHeight == 0 ? (sx + 1.0f) : (srcHeight / destHeight);
return Math.min(sx, sy);
}
public void update(Context context) {
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Point size = new Point();
//真实宽高
wm.getDefaultDisplay().getRealSize(size);
//应用尺寸
wm.getDefaultDisplay().getSize(mScreenSize);
//屏幕尺寸
wm.getDefaultDisplay().getRealSize(mRealScreenSize);
mDensity = context.getResources().getDisplayMetrics().density;
mScreenHeight = size.y;
mScreenWidth = size.x;
if (isImmerSiveMode() && context instanceof Activity) {
DisplayMetrics dm = SystemUtils.getHasVirtualDisplayMetrics((Activity) context);
if (dm != null) {
int height = Math.max(dm.widthPixels, dm.heightPixels);
Log.e("YGOMobileLog", "类地址" + System.identityHashCode(this));
int notchHeight = getNotchHeight();
try {
FileLogUtil.writeAndTime("是否沉浸: " + isImmerSiveMode());
FileLogUtil.writeAndTime("原始长: " + mScreenHeight);
FileLogUtil.writeAndTime("原始宽: " + mScreenWidth);
FileLogUtil.writeAndTime("界面长: " + dm.heightPixels);
FileLogUtil.writeAndTime("界面宽: " + dm.widthPixels);
FileLogUtil.writeAndTime("刘海长: " + notchHeight);
} catch (IOException e) {
e.printStackTrace();
}
height -= notchHeight;
try {
FileLogUtil.writeAndTime("处理后height值: " + height);
} catch (IOException e) {
e.printStackTrace();
}
if (mScreenHeight > mScreenWidth) {
mScreenHeight = height;
} else {
mScreenWidth = height;
}
try {
FileLogUtil.writeAndTime("转换后长: " + mScreenHeight);
FileLogUtil.writeAndTime("转换后宽: " + mScreenWidth);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public int getAppVersion() {
......@@ -146,17 +93,14 @@ public class AppsSettings {
mSharedPreferences.putInt(PREF_VERSION, ver);
}
public PreferenceFragmentPlus.SharedPreferencesPlus getSharedPreferences() {
return mSharedPreferences;
}
public float getSmallerSize() {
return mScreenHeight < mScreenWidth ? mScreenHeight : mScreenWidth;
}
public float getScreenWidth() {
return Math.min(mScreenWidth, mScreenHeight);
float w = getScreenWidth();
float h = getScreenHeight();
return h < w ? h : w;
}
public boolean isDialogDelete() {
......@@ -190,16 +134,56 @@ public class AppsSettings {
return false;//mSharedPreferences.getBoolean(PREF_DECK_MANAGER_V2, DEF_PREF_DECK_MANAGER_V2);
}
public float getXScale() {
return getScreenHeight() / (float) Constants.CORE_SKIN_BG_SIZE[0];
public float getXScale(int w, int h) {
if(isKeepScale()){
float sx = getScreenHeight() / w;
float sy = getScreenWidth() / h;
return Math.min(sx, sy);
}
return getScreenHeight() / w;
}
public float getYScale(int w, int h) {
if(isKeepScale()){
//固定比例,取最小值
float sx = getScreenHeight() / w;
float sy = getScreenWidth() / h;
return Math.min(sx, sy);
}
return getScreenWidth() / h;
}
public float getYScale() {
return getScreenWidth() / (float) Constants.CORE_SKIN_BG_SIZE[1];
public boolean isKeepScale(){
return mSharedPreferences.getBoolean(PREF_KEEP_SCALE, DEF_PREF_KEEP_SCALE);
}
public float getScreenWidth() {
int w, h;
if (isImmerSiveMode()) {
w = mRealScreenSize.x;
h = mRealScreenSize.y;
} else {
w = mScreenSize.x;
h = mScreenSize.y;
}
return Math.min(w, h);
}
public float getScreenHeight() {
return Math.max(mScreenWidth, mScreenHeight);
int w, h;
if (isImmerSiveMode()) {
w = mRealScreenSize.x;
h = mRealScreenSize.y;
} else {
w = mScreenSize.x;
h = mScreenSize.y;
}
int ret = Math.max(w, h);
if(isImmerSiveMode()){
//刘海高度
ret -= getNotchHeight();
}
return ret;
}
/**
......
......@@ -116,6 +116,9 @@ public interface Constants {
String PREF_DECK_MANAGER_V2 = "pref_settings_deck_manager_v2";
boolean DEF_PREF_DECK_MANAGER_V2 = false;
String PREF_KEEP_SCALE = "pref_settings_keep_scale";
boolean DEF_PREF_KEEP_SCALE = false;
int REQUEST_CUT_IMG = 0x1000 + 0x10;
int REQUEST_CHOOSE_FILE = 0x1000 + 0x20;
int REQUEST_CHOOSE_IMG = 0x1000 + 0x21;
......
......@@ -61,6 +61,7 @@ import static cn.garymb.ygomobile.Constants.PREF_GAME_FONT;
import static cn.garymb.ygomobile.Constants.PREF_GAME_PATH;
import static cn.garymb.ygomobile.Constants.PREF_IMAGE_QUALITY;
import static cn.garymb.ygomobile.Constants.PREF_IMMERSIVE_MODE;
import static cn.garymb.ygomobile.Constants.PREF_KEEP_SCALE;
import static cn.garymb.ygomobile.Constants.PREF_LOCK_SCREEN;
import static cn.garymb.ygomobile.Constants.PREF_ONLY_GAME;
import static cn.garymb.ygomobile.Constants.PREF_OPENGL_VERSION;
......@@ -146,6 +147,7 @@ public class SettingFragment extends PreferenceFragmentPlus {
bind(SETTINGS_CARD_BG, new File(mSettings.getCoreSkinPath(), Constants.CORE_SKIN_BG).getAbsolutePath());
bind(PREF_FONT_SIZE, mSettings.getFontSize());
bind(PREF_ONLY_GAME, mSettings.isOnlyGame());
bind(PREF_KEEP_SCALE, mSettings.isKeepScale());
isInit = false;
}
......
......@@ -270,4 +270,5 @@
<string name="donot_editor_bot_Deck">덱을 변경하지 말아 주세요. 그러면 프로그램이 제대로 작동하지 않을 수 있습니다.</string>
<string name="unable_to_edit_empty_deck">사용할 수 없는 빈 구역</string>
<string name="create_new_failed">생성실패</string>
<string name="about_pref_settings_keep_scale">Keep Display Scale</string>
</resources>
......@@ -269,4 +269,5 @@
<string name="donot_editor_bot_Deck">请不要更改/删除AI卡组否则会导致人机模式无法正常使用</string>
<string name="unable_to_edit_empty_deck">不可操作空卡组</string>
<string name="create_new_failed">创建失败</string>
<string name="about_pref_settings_keep_scale">游戏画面比例固定</string>
</resources>
......@@ -272,4 +272,5 @@
<string name="screenshoot">Screenshoot</string>
<string name="unable_to_edit_empty_deck">unable to edit empty deck</string>
<string name="create_new_failed">Create Failed</string>
<string name="about_pref_settings_keep_scale">Keep Display Scale</string>
</resources>
......@@ -13,6 +13,12 @@
<Preference
android:key="pref_key_change_log"
android:title="@string/settings_about_change_log" />
<CheckBoxPreference
android:key="pref_settings_keep_scale"
android:persistent="false"
android:title="@string/about_pref_settings_keep_scale"/>
<ListPreference
android:entries="@array/opengl_version"
android:entryValues="@array/opengl_version_value"
......
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