mirror of
https://github.com/brunodev85/winlator.git
synced 2026-10-20 22:11:47 +03:00
Update app
This commit is contained in:
1 parent
3af161cdef
commit
8feeff4299
43 files changed
+248
-42
No files matched your search
+4
-2
@@ -8,8 +8,8 @@ android {
|
||||
applicationId 'com.winlator'
|
||||
minSdkVersion 26
|
||||
targetSdkVersion 28
|
||||
versionCode 12
|
||||
versionName "6.0"
|
||||
versionCode 13
|
||||
versionName "6.1"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
@@ -27,6 +27,8 @@ android {
|
||||
checkReleaseBuilds false
|
||||
}
|
||||
|
||||
ndkVersion '22.1.7171670'
|
||||
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
version '3.22.1'
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ffbd6b8bb2d8df316038c1ffbe6a882b620ac5a87c078e3272d8299d79de1b64
|
||||
size 167540620
|
||||
oid sha256:68491a479524185489abae06045bf9f9d0018b57ec7bd7d26faeb58edcd2f1b5
|
||||
size 167532776
|
||||
Binary file not shown.
Binary file not shown.
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.22.1)
|
||||
|
||||
Project(Winlator)
|
||||
|
||||
set(CMAKE_C_FLAGS "-O2 -Wno-unused-function -Wimplicit-function-declaration")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -Wno-unused-function -Wimplicit-function-declaration")
|
||||
|
||||
add_subdirectory(proot)
|
||||
add_subdirectory(virglrenderer)
|
||||
|
||||
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.22.1)
|
||||
|
||||
project(PRoot)
|
||||
|
||||
set(CMAKE_C_FLAGS "-O2 -Wno-unused-function -Wimplicit-function-declaration")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -Wno-unused-function -Wimplicit-function-declaration")
|
||||
|
||||
add_library(talloc STATIC
|
||||
talloc/talloc.c)
|
||||
|
||||
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.22.1)
|
||||
|
||||
project(VirGLRenderer)
|
||||
|
||||
set(CMAKE_C_FLAGS "-O2 -Wno-unused-function -Wimplicit-function-declaration")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -Wno-unused-function -Wimplicit-function-declaration")
|
||||
|
||||
include_directories(src
|
||||
src/gallium/include
|
||||
|
||||
@@ -4,7 +4,6 @@ import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Color;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
@@ -32,6 +31,7 @@ import com.winlator.container.Container;
|
||||
import com.winlator.container.ContainerManager;
|
||||
import com.winlator.contentdialog.AddEnvVarDialog;
|
||||
import com.winlator.contentdialog.DXVKConfigDialog;
|
||||
import com.winlator.contentdialog.TurnipConfigDialog;
|
||||
import com.winlator.core.AppUtils;
|
||||
import com.winlator.core.Callback;
|
||||
import com.winlator.core.EnvVars;
|
||||
@@ -135,8 +135,11 @@ public class ContainerDetailFragment extends Fragment {
|
||||
final View vDXWrapperConfig = view.findViewById(R.id.BTDXWrapperConfig);
|
||||
vDXWrapperConfig.setTag(editContainer ? container.getDXWrapperConfig() : "");
|
||||
|
||||
final View vGraphicsDriverConfig = view.findViewById(R.id.BTGraphicsDriverConfig);
|
||||
vGraphicsDriverConfig.setTag(editContainer ? container.getGraphicsDriverConfig() : "");
|
||||
|
||||
setupDXWrapperSpinner(sDXWrapper, vDXWrapperConfig);
|
||||
loadGraphicsDriverSpinner(sGraphicsDriver, sDXWrapper,
|
||||
loadGraphicsDriverSpinner(sGraphicsDriver, sDXWrapper, vGraphicsDriverConfig,
|
||||
editContainer ? container.getGraphicsDriver() : Container.DEFAULT_GRAPHICS_DRIVER, editContainer ? container.getDXWrapper() : Container.DEFAULT_DXWRAPPER);
|
||||
|
||||
view.findViewById(R.id.BTHelpDXWrapper).setOnClickListener((v) -> AppUtils.showHelpBox(context, v, R.string.dxwrapper_help_content));
|
||||
@@ -175,6 +178,7 @@ public class ContainerDetailFragment extends Fragment {
|
||||
String graphicsDriver = StringUtils.parseIdentifier(sGraphicsDriver.getSelectedItem());
|
||||
String dxwrapper = StringUtils.parseIdentifier(sDXWrapper.getSelectedItem());
|
||||
String dxwrapperConfig = vDXWrapperConfig.getTag().toString();
|
||||
String graphicsDriverConfig = vGraphicsDriverConfig.getTag().toString();
|
||||
String audioDriver = StringUtils.parseIdentifier(sAudioDriver.getSelectedItem());
|
||||
String wincomponents = getWinComponents(view);
|
||||
String drives = getDrives(view);
|
||||
@@ -193,6 +197,7 @@ public class ContainerDetailFragment extends Fragment {
|
||||
container.setGraphicsDriver(graphicsDriver);
|
||||
container.setDXWrapper(dxwrapper);
|
||||
container.setDXWrapperConfig(dxwrapperConfig);
|
||||
container.setGraphicsDriverConfig(graphicsDriverConfig);
|
||||
container.setAudioDriver(audioDriver);
|
||||
container.setWinComponents(wincomponents);
|
||||
container.setDrives(drives);
|
||||
@@ -214,6 +219,7 @@ public class ContainerDetailFragment extends Fragment {
|
||||
data.put("graphicsDriver", graphicsDriver);
|
||||
data.put("dxwrapper", dxwrapper);
|
||||
data.put("dxwrapperConfig", dxwrapperConfig);
|
||||
data.put("graphicsDriverConfig", graphicsDriverConfig);
|
||||
data.put("audioDriver", audioDriver);
|
||||
data.put("wincomponents", wincomponents);
|
||||
data.put("drives", drives);
|
||||
@@ -442,7 +448,7 @@ public class ContainerDetailFragment extends Fragment {
|
||||
}
|
||||
}
|
||||
|
||||
public static void loadGraphicsDriverSpinner(final Spinner sGraphicsDriver, final Spinner sDXWrapper, String selectedGraphicsDriver, String selectedDXWrapper) {
|
||||
public static void loadGraphicsDriverSpinner(final Spinner sGraphicsDriver, final Spinner sDXWrapper, final View vGraphicsDriverConfig, String selectedGraphicsDriver, String selectedDXWrapper) {
|
||||
final Context context = sGraphicsDriver.getContext();
|
||||
final String[] dxwrapperEntries = context.getResources().getStringArray(R.array.dxwrapper_entries);
|
||||
|
||||
@@ -459,6 +465,12 @@ public class ContainerDetailFragment extends Fragment {
|
||||
sGraphicsDriver.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
String graphicsDriver = StringUtils.parseIdentifier(sGraphicsDriver.getSelectedItem());
|
||||
if (graphicsDriver.equals("turnip")) {
|
||||
vGraphicsDriverConfig.setOnClickListener((v) -> (new TurnipConfigDialog(vGraphicsDriverConfig)).show());
|
||||
vGraphicsDriverConfig.setVisibility(View.VISIBLE);
|
||||
}
|
||||
else vGraphicsDriverConfig.setVisibility(View.GONE);
|
||||
update.run();
|
||||
}
|
||||
|
||||
@@ -467,11 +479,10 @@ public class ContainerDetailFragment extends Fragment {
|
||||
});
|
||||
|
||||
AppUtils.setSpinnerSelectionFromIdentifier(sGraphicsDriver, selectedGraphicsDriver);
|
||||
|
||||
update.run();
|
||||
}
|
||||
|
||||
public static void setupDXWrapperSpinner(Spinner sDXWrapper, View vDXWrapperConfig) {
|
||||
public static void setupDXWrapperSpinner(final Spinner sDXWrapper, final View vDXWrapperConfig) {
|
||||
sDXWrapper.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
|
||||
@@ -185,9 +185,9 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
|
||||
try {
|
||||
final PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
|
||||
|
||||
TextView tvDeveloper = dialog.findViewById(R.id.TVDeveloper);
|
||||
tvDeveloper.setText(Html.fromHtml("by BrunoSX (<a href=\"https://www.winlator.org\">winlator.org</a>)", Html.FROM_HTML_MODE_LEGACY));
|
||||
tvDeveloper.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
TextView tvWebpage = dialog.findViewById(R.id.TVWebpage);
|
||||
tvWebpage.setText(Html.fromHtml("<a href=\"https://www.winlator.org\">winlator.org</a>", Html.FROM_HTML_MODE_LEGACY));
|
||||
tvWebpage.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
|
||||
((TextView)dialog.findViewById(R.id.TVAppVersion)).setText(getString(R.string.version)+" "+pInfo.versionName);
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.winlator.container.ContainerManager;
|
||||
import com.winlator.container.Shortcut;
|
||||
import com.winlator.contentdialog.ContentDialog;
|
||||
import com.winlator.contentdialog.DXVKConfigDialog;
|
||||
import com.winlator.contentdialog.TurnipConfigDialog;
|
||||
import com.winlator.core.AppUtils;
|
||||
import com.winlator.core.CursorLocker;
|
||||
import com.winlator.core.EnvVars;
|
||||
@@ -96,6 +97,7 @@ public class XServerDisplayActivity extends AppCompatActivity implements Navigat
|
||||
private String audioDriver = Container.DEFAULT_AUDIO_DRIVER;
|
||||
private String dxwrapper = Container.DEFAULT_DXWRAPPER;
|
||||
private KeyValueSet dxwrapperConfig;
|
||||
private KeyValueSet graphicsDriverConfig;
|
||||
private WineInfo wineInfo;
|
||||
private final EnvVars envVars = new EnvVars();
|
||||
private boolean firstTimeBoot = false;
|
||||
@@ -145,6 +147,7 @@ public class XServerDisplayActivity extends AppCompatActivity implements Navigat
|
||||
audioDriver = container.getAudioDriver();
|
||||
dxwrapper = container.getDXWrapper();
|
||||
String dxwrapperConfig = container.getDXWrapperConfig();
|
||||
String graphicsDriverConfig = container.getGraphicsDriverConfig();
|
||||
screenSize = container.getScreenSize();
|
||||
|
||||
if (shortcut != null) {
|
||||
@@ -152,6 +155,7 @@ public class XServerDisplayActivity extends AppCompatActivity implements Navigat
|
||||
audioDriver = shortcut.getExtra("audioDriver", container.getAudioDriver());
|
||||
dxwrapper = shortcut.getExtra("dxwrapper", container.getDXWrapper());
|
||||
dxwrapperConfig = shortcut.getExtra("dxwrapperConfig", container.getDXWrapperConfig());
|
||||
graphicsDriverConfig = shortcut.getExtra("graphicsDriverConfig", container.getGraphicsDriverConfig());
|
||||
screenSize = shortcut.getExtra("screenSize", container.getScreenSize());
|
||||
|
||||
String dinputMapperType = shortcut.getExtra("dinputMapperType");
|
||||
@@ -159,6 +163,7 @@ public class XServerDisplayActivity extends AppCompatActivity implements Navigat
|
||||
}
|
||||
|
||||
if (dxwrapper.equals("dxvk")) this.dxwrapperConfig = DXVKConfigDialog.parseConfig(dxwrapperConfig);
|
||||
if (graphicsDriver.equals("turnip")) this.graphicsDriverConfig = TurnipConfigDialog.parseConfig(this, graphicsDriverConfig);
|
||||
|
||||
if (!wineInfo.isWin64()) {
|
||||
onExtractFileListener = (file, size) -> {
|
||||
@@ -407,6 +412,7 @@ public class XServerDisplayActivity extends AppCompatActivity implements Navigat
|
||||
winHandler.start();
|
||||
envVars.clear();
|
||||
dxwrapperConfig = null;
|
||||
graphicsDriverConfig = null;
|
||||
}
|
||||
|
||||
private void setupUI() {
|
||||
@@ -529,7 +535,7 @@ public class XServerDisplayActivity extends AppCompatActivity implements Navigat
|
||||
private void extractGraphicsDriverFiles() {
|
||||
String cacheId = graphicsDriver;
|
||||
if (graphicsDriver.equals("turnip")) {
|
||||
cacheId += "-"+DefaultVersion.TURNIP+"-"+DefaultVersion.ZINK;
|
||||
cacheId += "-"+graphicsDriverConfig.get("version")+"-"+DefaultVersion.ZINK;
|
||||
}
|
||||
else if (graphicsDriver.equals("virgl")) {
|
||||
cacheId += "-"+DefaultVersion.VIRGL;
|
||||
@@ -549,8 +555,8 @@ public class XServerDisplayActivity extends AppCompatActivity implements Navigat
|
||||
|
||||
if (graphicsDriver.equals("turnip")) {
|
||||
if (dxwrapper.equals("dxvk")) DXVKConfigDialog.setEnvVars(this, dxwrapperConfig, envVars);
|
||||
TurnipConfigDialog.setEnvVars(graphicsDriverConfig, envVars);
|
||||
envVars.put("GALLIUM_DRIVER", "zink");
|
||||
envVars.put("TU_DEBUG", "noconform");
|
||||
envVars.put("MESA_VK_WSI_PRESENT_MODE", "mailbox");
|
||||
envVars.put("vblank_mode", "0");
|
||||
|
||||
@@ -561,7 +567,7 @@ public class XServerDisplayActivity extends AppCompatActivity implements Navigat
|
||||
}
|
||||
|
||||
if (changed) {
|
||||
TarCompressorUtils.extract(TarCompressorUtils.Type.ZSTD, this, "graphics_driver/turnip-"+DefaultVersion.TURNIP+".tzst", rootDir);
|
||||
TarCompressorUtils.extract(TarCompressorUtils.Type.ZSTD, this, "graphics_driver/turnip-"+graphicsDriverConfig.get("version")+".tzst", rootDir);
|
||||
TarCompressorUtils.extract(TarCompressorUtils.Type.ZSTD, this, "graphics_driver/zink-"+DefaultVersion.ZINK+".tzst", rootDir);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ public class Container {
|
||||
public static final String DEFAULT_DXWRAPPER = "wined3d";
|
||||
public static final String DEFAULT_WINCOMPONENTS = "direct3d=1,directsound=1,directmusic=0,directshow=0,directplay=0,vcrun2010=1";
|
||||
public static final String FALLBACK_WINCOMPONENTS = "direct3d=0,directsound=0,directmusic=0,directshow=0,directplay=0,vcrun2010=0";
|
||||
public static final String DEFAULT_DRIVES = "D:"+Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
|
||||
public static final String DEFAULT_DRIVES = "D:"+Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+"E:/data/data/com.winlator/storage";
|
||||
public static final byte MAX_DRIVE_LETTERS = 8;
|
||||
public final int id;
|
||||
private String name;
|
||||
@@ -34,6 +34,7 @@ public class Container {
|
||||
private String graphicsDriver = DEFAULT_GRAPHICS_DRIVER;
|
||||
private String dxwrapper = DEFAULT_DXWRAPPER;
|
||||
private String dxwrapperConfig = "";
|
||||
private String graphicsDriverConfig = "";
|
||||
private String wincomponents = DEFAULT_WINCOMPONENTS;
|
||||
private String audioDriver = DEFAULT_AUDIO_DRIVER;
|
||||
private String drives = DEFAULT_DRIVES;
|
||||
@@ -100,6 +101,14 @@ public class Container {
|
||||
this.dxwrapperConfig = dxwrapperConfig != null ? dxwrapperConfig : "";
|
||||
}
|
||||
|
||||
public String getGraphicsDriverConfig() {
|
||||
return graphicsDriverConfig;
|
||||
}
|
||||
|
||||
public void setGraphicsDriverConfig(String graphicsDriverConfig) {
|
||||
this.graphicsDriverConfig = graphicsDriverConfig != null ? graphicsDriverConfig : "";
|
||||
}
|
||||
|
||||
public String getAudioDriver() {
|
||||
return audioDriver;
|
||||
}
|
||||
@@ -267,6 +276,7 @@ public class Container {
|
||||
data.put("graphicsDriver", graphicsDriver);
|
||||
data.put("dxwrapper", dxwrapper);
|
||||
if (!dxwrapperConfig.isEmpty()) data.put("dxwrapperConfig", dxwrapperConfig);
|
||||
if (!graphicsDriverConfig.isEmpty()) data.put("graphicsDriverConfig", graphicsDriverConfig);
|
||||
data.put("audioDriver", audioDriver);
|
||||
data.put("wincomponents", wincomponents);
|
||||
data.put("drives", drives);
|
||||
@@ -289,6 +299,7 @@ public class Container {
|
||||
public void loadData(JSONObject data) throws JSONException {
|
||||
wineVersion = WineInfo.MAIN_WINE_VERSION.identifier();
|
||||
dxwrapperConfig = "";
|
||||
graphicsDriverConfig = "";
|
||||
checkObsoleteOrMissingProperties(data);
|
||||
|
||||
for (Iterator<String> it = data.keys(); it.hasNext(); ) {
|
||||
@@ -318,6 +329,9 @@ public class Container {
|
||||
case "dxwrapperConfig" :
|
||||
setDXWrapperConfig(data.getString(key));
|
||||
break;
|
||||
case "graphicsDriverConfig" :
|
||||
setGraphicsDriverConfig(data.getString(key));
|
||||
break;
|
||||
case "drives" :
|
||||
setDrives(data.getString(key));
|
||||
break;
|
||||
|
||||
@@ -141,6 +141,7 @@ public class ContainerManager {
|
||||
dstContainer.setGraphicsDriver(srcContainer.getGraphicsDriver());
|
||||
dstContainer.setDXWrapper(srcContainer.getDXWrapper());
|
||||
dstContainer.setDXWrapperConfig(srcContainer.getDXWrapperConfig());
|
||||
dstContainer.setGraphicsDriverConfig(srcContainer.getGraphicsDriverConfig());
|
||||
dstContainer.setAudioDriver(srcContainer.getAudioDriver());
|
||||
dstContainer.setWinComponents(srcContainer.getWinComponents());
|
||||
dstContainer.setDrives(srcContainer.getDrives());
|
||||
|
||||
@@ -66,14 +66,17 @@ public class ShortcutSettingsDialog extends ContentDialog {
|
||||
final View vDXWrapperConfig = findViewById(R.id.BTDXWrapperConfig);
|
||||
vDXWrapperConfig.setTag(shortcut.getExtra("dxwrapperConfig", shortcut.container.getDXWrapperConfig()));
|
||||
|
||||
final View vGraphicsDriverConfig = findViewById(R.id.BTGraphicsDriverConfig);
|
||||
vGraphicsDriverConfig.setTag(shortcut.getExtra("graphicsDriverConfig", shortcut.container.getGraphicsDriverConfig()));
|
||||
|
||||
ContainerDetailFragment.setupDXWrapperSpinner(sDXWrapper, vDXWrapperConfig);
|
||||
ContainerDetailFragment.loadGraphicsDriverSpinner(sGraphicsDriver, sDXWrapper,
|
||||
ContainerDetailFragment.loadGraphicsDriverSpinner(sGraphicsDriver, sDXWrapper, vGraphicsDriverConfig,
|
||||
shortcut.getExtra("graphicsDriver", shortcut.container.getGraphicsDriver()), shortcut.getExtra("dxwrapper", shortcut.container.getDXWrapper()));
|
||||
|
||||
findViewById(R.id.BTHelpDXWrapper).setOnClickListener((v) -> AppUtils.showHelpBox(context, v, R.string.dxwrapper_help_content));
|
||||
|
||||
final Spinner sAudioDriver = findViewById(R.id.SAudioDriver);
|
||||
AppUtils.setSpinnerSelectionFromIdentifier(sAudioDriver, shortcut.getExtra("audioDriver"));
|
||||
AppUtils.setSpinnerSelectionFromIdentifier(sAudioDriver, shortcut.getExtra("audioDriver", shortcut.container.getAudioDriver()));
|
||||
|
||||
final CheckBox cbForceFullscreen = findViewById(R.id.CBForceFullscreen);
|
||||
cbForceFullscreen.setChecked(shortcut.getExtra("forceFullscreen", "0").equals("1"));
|
||||
@@ -117,6 +120,7 @@ public class ShortcutSettingsDialog extends ContentDialog {
|
||||
String graphicsDriver = StringUtils.parseIdentifier(sGraphicsDriver.getSelectedItem());
|
||||
String dxwrapper = StringUtils.parseIdentifier(sDXWrapper.getSelectedItem());
|
||||
String dxwrapperConfig = vDXWrapperConfig.getTag().toString();
|
||||
String graphicsDriverConfig = vGraphicsDriverConfig.getTag().toString();
|
||||
String audioDriver = StringUtils.parseIdentifier(sAudioDriver.getSelectedItem());
|
||||
|
||||
String execArgs = etExecArgs.getText().toString();
|
||||
@@ -125,6 +129,7 @@ public class ShortcutSettingsDialog extends ContentDialog {
|
||||
shortcut.putExtra("graphicsDriver", !graphicsDriver.equals(shortcut.container.getGraphicsDriver()) ? graphicsDriver : null);
|
||||
shortcut.putExtra("dxwrapper", !dxwrapper.equals(shortcut.container.getDXWrapper()) ? dxwrapper : null);
|
||||
shortcut.putExtra("dxwrapperConfig", !dxwrapperConfig.equals(shortcut.container.getDXWrapperConfig()) ? dxwrapperConfig : null);
|
||||
shortcut.putExtra("graphicsDriverConfig", !graphicsDriverConfig.equals(shortcut.container.getGraphicsDriverConfig()) ? graphicsDriverConfig : null);
|
||||
shortcut.putExtra("audioDriver", !audioDriver.equals(shortcut.container.getAudioDriver())? audioDriver : null);
|
||||
shortcut.putExtra("forceFullscreen", cbForceFullscreen.isChecked() ? "1" : null);
|
||||
shortcut.putExtra("wincomponents", getWinComponents());
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
package com.winlator.contentdialog;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.Spinner;
|
||||
|
||||
import com.winlator.R;
|
||||
import com.winlator.core.AppUtils;
|
||||
import com.winlator.core.DefaultVersion;
|
||||
import com.winlator.core.EnvVars;
|
||||
import com.winlator.core.KeyValueSet;
|
||||
import com.winlator.core.StringUtils;
|
||||
import com.winlator.core.UnitUtils;
|
||||
|
||||
public class TurnipConfigDialog extends ContentDialog {
|
||||
private static final String[] DEBUG_OPTIONS = {"noconform", "syncdraw", "flushall"};
|
||||
|
||||
public TurnipConfigDialog(View anchor) {
|
||||
super(anchor.getContext(), R.layout.turnip_config_dialog);
|
||||
Context context = anchor.getContext();
|
||||
setIcon(R.drawable.icon_settings);
|
||||
setTitle("Turnip "+context.getString(R.string.configuration));
|
||||
|
||||
final Spinner sVersion = findViewById(R.id.SVersion);
|
||||
|
||||
KeyValueSet config = parseConfig(context, anchor.getTag());
|
||||
AppUtils.setSpinnerSelectionFromIdentifier(sVersion, config.get("version"));
|
||||
loadDebugOptions(config.get("options"));
|
||||
|
||||
setOnConfirmCallback(() -> {
|
||||
config.put("version", StringUtils.parseNumber(sVersion.getSelectedItem()));
|
||||
config.put("options", getDebugOptions());
|
||||
anchor.setTag(config.toString());
|
||||
});
|
||||
}
|
||||
|
||||
private static String getDefaultConfig(Context context) {
|
||||
return "version="+DefaultVersion.TURNIP(context)+",options=noconform";
|
||||
}
|
||||
|
||||
private String getDebugOptions() {
|
||||
String options = "";
|
||||
LinearLayout container = findViewById(R.id.LLOptions);
|
||||
|
||||
for (int i = 0; i < container.getChildCount(); i++) {
|
||||
CheckBox checkBox = (CheckBox)container.getChildAt(i);
|
||||
if (checkBox.isChecked()) options += (!options.isEmpty() ? "|" : "")+checkBox.getText();
|
||||
}
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
private void loadDebugOptions(String options) {
|
||||
LinearLayout container = findViewById(R.id.LLOptions);
|
||||
container.removeAllViews();
|
||||
Context context = container.getContext();
|
||||
|
||||
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||
params.setMargins(0, 0, (int)UnitUtils.dpToPx(4), 0);
|
||||
for (String opt : DEBUG_OPTIONS) {
|
||||
CheckBox checkBox = new CheckBox(context);
|
||||
checkBox.setText(opt);
|
||||
checkBox.setLayoutParams(params);
|
||||
checkBox.setChecked(options.contains(opt));
|
||||
container.addView(checkBox);
|
||||
}
|
||||
}
|
||||
|
||||
public static KeyValueSet parseConfig(Context context, Object config) {
|
||||
String data = config != null && !config.toString().isEmpty() ? config.toString() : getDefaultConfig(context);
|
||||
return new KeyValueSet(data);
|
||||
}
|
||||
|
||||
public static void setEnvVars(KeyValueSet config, EnvVars envVars) {
|
||||
String options = config.get("options");
|
||||
if (!options.isEmpty()) envVars.put("TU_DEBUG", options.replace("|", ","));
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,15 @@
|
||||
package com.winlator.core;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
public abstract class DefaultVersion {
|
||||
public static final String BOX86 = "0.3.0";
|
||||
public static final String BOX64 = "0.2.6";
|
||||
public static final String TURNIP = "24.0.2";
|
||||
public static final String ZINK = "22.2.2";
|
||||
public static final String VIRGL = "22.1.7";
|
||||
public static final String DXVK = "1.10.3";
|
||||
|
||||
public static String TURNIP(Context context) {
|
||||
return GPUInformation.isAdreno6xx(context) ? "23.0.0" : "24.1.0";
|
||||
}
|
||||
}
|
||||
@@ -31,7 +31,13 @@ public abstract class WineUtils {
|
||||
FileUtils.symlink("/", dosdevicesPath+"/z:");
|
||||
|
||||
for (String[] drive : container.drivesIterator()) {
|
||||
FileUtils.symlink((new File(drive[1])).getAbsolutePath(), dosdevicesPath+"/"+drive[0].toLowerCase(Locale.ENGLISH)+":");
|
||||
File linkTarget = new File(drive[1]);
|
||||
String path = linkTarget.getAbsolutePath();
|
||||
if (!linkTarget.isDirectory() && path.endsWith("/com.winlator/storage")) {
|
||||
linkTarget.mkdirs();
|
||||
FileUtils.chmod(linkTarget, 0771);
|
||||
}
|
||||
FileUtils.symlink(path, dosdevicesPath+"/"+drive[0].toLowerCase(Locale.ENGLISH)+":");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -85,12 +85,12 @@ public class TouchpadView extends View {
|
||||
this.y = transformedPoint[1];
|
||||
}
|
||||
|
||||
private int deltaX() {
|
||||
private int deltaX(float sensitivity) {
|
||||
float dx = (x - lastX) * sensitivity;
|
||||
return (int)(x <= lastX ? Math.floor(dx) : Math.ceil(dx));
|
||||
}
|
||||
|
||||
private int deltaY() {
|
||||
private int deltaY(float sensitivity) {
|
||||
float dy = (y - lastY) * sensitivity;
|
||||
return (int)(y <= lastY ? Math.floor(dy) : Math.ceil(dy));
|
||||
}
|
||||
@@ -214,8 +214,10 @@ public class TouchpadView extends View {
|
||||
}
|
||||
|
||||
if (!scrolling && numFingers <= 2 && !skipPointerMove) {
|
||||
int dx = finger1.deltaX();
|
||||
int dy = finger1.deltaY();
|
||||
float distance = (float)Math.hypot(finger1.x - finger1.lastX, finger1.y - finger1.lastY);
|
||||
float sensitivity = this.sensitivity * Math.min(distance, 1.0f);
|
||||
int dx = finger1.deltaX(sensitivity);
|
||||
int dy = finger1.deltaY(sensitivity);
|
||||
|
||||
if (xServer.cursorLocker.getState() == CursorLocker.State.LOCKED) {
|
||||
WinHandler winHandler = xServer.getWinHandler();
|
||||
|
||||
@@ -26,7 +26,7 @@ import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
public abstract class ImageFsInstaller {
|
||||
public static final byte LATEST_VERSION = 4;
|
||||
public static final byte LATEST_VERSION = 5;
|
||||
|
||||
private static void resetContainerImgVersions(Context context) {
|
||||
ContainerManager manager = new ContainerManager(context);
|
||||
|
||||
+2
-2
@@ -177,7 +177,7 @@ public class GuestProgramLauncherComponent extends EnvironmentComponent {
|
||||
}
|
||||
|
||||
private void addBox86EnvVars(EnvVars envVars) {
|
||||
envVars.put("BOX86_NOBANNER", "1");
|
||||
envVars.put("BOX86_NOBANNER", MainActivity.DEBUG_LEVEL == 1 ? "0" : "1");
|
||||
envVars.put("BOX86_DYNAREC", "1");
|
||||
|
||||
if (MainActivity.DEBUG_LEVEL >= 3) envVars.put("BOX86_LOG", MainActivity.DEBUG_LEVEL == 3 ? "1" : "2");
|
||||
@@ -188,7 +188,7 @@ public class GuestProgramLauncherComponent extends EnvironmentComponent {
|
||||
}
|
||||
|
||||
private void addBox64EnvVars(EnvVars envVars) {
|
||||
envVars.put("BOX64_NOBANNER", "1");
|
||||
envVars.put("BOX64_NOBANNER", MainActivity.DEBUG_LEVEL == 1 ? "0" : "1");
|
||||
envVars.put("BOX64_DYNAREC", "1");
|
||||
|
||||
if (MainActivity.DEBUG_LEVEL >= 3) envVars.put("BOX64_LOG", MainActivity.DEBUG_LEVEL == 3 ? "1" : "2");
|
||||
|
||||
@@ -55,10 +55,12 @@ public class PulseAudioComponent extends EnvironmentComponent {
|
||||
"set-default-sink AAudioSink"
|
||||
));
|
||||
|
||||
File modulesDir = new File(workingDir, "modules/"+ AppUtils.getArchName());
|
||||
String archName = AppUtils.getArchName();
|
||||
File modulesDir = new File(workingDir, "modules/"+archName);
|
||||
String systemLibPath = archName.equals("arm64") ? "/system/lib64" : "system/lib";
|
||||
|
||||
ArrayList<String> envVars = new ArrayList<>();
|
||||
envVars.add("LD_LIBRARY_PATH="+nativeLibraryDir+":"+modulesDir);
|
||||
envVars.add("LD_LIBRARY_PATH="+systemLibPath+":"+nativeLibraryDir+":"+modulesDir);
|
||||
envVars.add("HOME="+workingDir);
|
||||
envVars.add("TMPDIR="+environment.getTmpDir());
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -30,11 +30,11 @@
|
||||
android:text="@string/app_name" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/TVDeveloper"
|
||||
android:id="@+id/TVWebpage"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="14sp"
|
||||
android:textColor="#9e9e9e" />
|
||||
android:textColor="@color/colorAccent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/TVAppVersion"
|
||||
|
||||
@@ -124,11 +124,25 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/graphics_driver" />
|
||||
|
||||
<Spinner
|
||||
style="@style/ComboBox"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:id="@+id/SGraphicsDriver"
|
||||
android:entries="@array/graphics_driver_entries" />
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
<Spinner
|
||||
style="@style/ComboBox"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/SGraphicsDriver"
|
||||
android:entries="@array/graphics_driver_entries" />
|
||||
|
||||
<ImageButton
|
||||
style="@style/ListMenuButton"
|
||||
android:id="@+id/BTGraphicsDriverConfig"
|
||||
android:src="@drawable/icon_settings"
|
||||
android:visibility="gone" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -103,11 +103,25 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/graphics_driver" />
|
||||
|
||||
<Spinner
|
||||
style="@style/ComboBox"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:id="@+id/SGraphicsDriver"
|
||||
android:entries="@array/graphics_driver_entries" />
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
<Spinner
|
||||
style="@style/ComboBox"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/SGraphicsDriver"
|
||||
android:entries="@array/graphics_driver_entries" />
|
||||
|
||||
<ImageButton
|
||||
style="@style/ListMenuButton"
|
||||
android:id="@+id/BTGraphicsDriverConfig"
|
||||
android:src="@drawable/icon_settings"
|
||||
android:visibility="gone" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="120dp">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="300dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/version" />
|
||||
|
||||
<Spinner
|
||||
style="@style/ComboBox"
|
||||
android:layout_width="match_parent"
|
||||
android:id="@+id/SVersion"
|
||||
android:entries="@array/turnip_version_entries" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/options" />
|
||||
|
||||
<HorizontalScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/LLOptions"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" />
|
||||
</HorizontalScrollView>
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
@@ -40,6 +40,10 @@
|
||||
<item>1.10.3 (Default)</item>
|
||||
<item>2.3.1</item>
|
||||
</string-array>
|
||||
<string-array name="turnip_version_entries">
|
||||
<item>23.0.0</item>
|
||||
<item>24.1.0</item>
|
||||
</string-array>
|
||||
<string-array name="dxvk_max_device_memory_entries">
|
||||
<item>0 (Default)</item>
|
||||
<item>512 MB</item>
|
||||
|
||||
@@ -211,4 +211,5 @@
|
||||
<string name="browse">Browse</string>
|
||||
<string name="magnifier">Magnifier</string>
|
||||
<string name="bring_to_front">Bring to Front</string>
|
||||
<string name="options">Options</string>
|
||||
</resources>
|
||||
Reference in new issue
Block a user