diff --git a/app/build.gradle b/app/build.gradle index 55e2b82c6..79aeba4c4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -49,8 +49,8 @@ android { enable true reset() - include "x86", "x86_64", "armeabi-v7a", "arm64-v8a" - universalApk true //generate an additional APK that contains all the ABIs + include "arm64-v8a" + } } @@ -99,4 +99,5 @@ dependencies { implementation 'androidx.annotation:annotation:1.6.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' compileOnly project(':shell-loader:stub') + } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1e001ac19..736b891d7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:installLocation="internalOnly"> + diff --git a/app/src/main/java/com/termux/x11/LoriePreferences.java b/app/src/main/java/com/termux/x11/LoriePreferences.java index 4de4157e2..b3597949b 100644 --- a/app/src/main/java/com/termux/x11/LoriePreferences.java +++ b/app/src/main/java/com/termux/x11/LoriePreferences.java @@ -2,6 +2,11 @@ import static android.Manifest.permission.WRITE_SECURE_SETTINGS; import static android.content.pm.PackageManager.PERMISSION_GRANTED; +import android.os.Environment; +import java.nio.file.Files; +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; import android.annotation.SuppressLint; import android.app.Dialog; @@ -83,6 +88,29 @@ public static class LoriePreferenceFragment extends PreferenceFragmentCompat imp public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { addPreferencesFromResource(R.xml.preferences); } + + @Override + public void onDetach() { + + // SharedPreferences sp = getContext().getSharedPreferences("com.eltechs.ed.CONTAINER_CONFIG_0", Context.MODE_PRIVATE); + SharedPreferences sp = android.preference.PreferenceManager.getDefaultSharedPreferences(getContext()); + String res = null; + String mode = sp.getString("displayResolutionMode", "native"); + if ("exact".equals(mode)) + res = sp.getString("displayResolutionExact", "1280x1024"); + else if("custom".equals(mode)) + res = sp.getString("displayResolutionCustom", "1280x1024"); + try { + File file = new File(Environment.getExternalStorageDirectory(), "Box64Droid/resolution.conf"); + if (!file.exists()) + file.createNewFile(); + if (res != null && file.canWrite()) + Files.write(file.toPath(),res.getBytes(StandardCharsets.UTF_8)); + } catch (IOException e) { + e.printStackTrace(); + } + super.onDetach(); + } @SuppressWarnings("ConstantConditions") void updatePreferencesLayout() { diff --git a/app/src/main/java/com/termux/x11/LorieView.java b/app/src/main/java/com/termux/x11/LorieView.java new file mode 100644 index 000000000..b0cf72ba0 --- /dev/null +++ b/app/src/main/java/com/termux/x11/LorieView.java @@ -0,0 +1,72 @@ +package com.termux.x11; + +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; +import android.util.AttributeSet; +import android.view.SurfaceView; + +import java.util.regex.PatternSyntaxException; + +public class LorieView extends SurfaceView { + public LorieView(Context context) { + super(context); + } + + public LorieView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public LorieView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public LorieView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + try { + + SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); + boolean shouldResize = sp.getBoolean("should_full_screen_with_ratio", true); //full_screen_with_ratio是字符串类型了 + + float ratio; //宽除以高 + String[] res = null; + switch (sp.getString("displayResolutionMode", "native")) { + case "exact": { + res = sp.getString("displayResolutionExact", "1280x1024").split("x"); + break; + } + case "custom": { + try { + res = sp.getString("displayResolutionCustom", "1280x1024").split("x"); + } catch (NumberFormatException | PatternSyntaxException ignored) { + } + break; + } + default: + break; + } + + ratio = res != null ? Integer.parseInt(res[0]) * 1.0f / Integer.parseInt(res[1]) : 0f; + + if (ratio != 0 && shouldResize) { + int width = MeasureSpec.getSize(widthMeasureSpec); + int height = MeasureSpec.getSize(heightMeasureSpec); + //左右黑边 + if (width * 1f / height > ratio) { + widthMeasureSpec = MeasureSpec.makeMeasureSpec((int) (height * ratio), MeasureSpec.EXACTLY); + } + //上下黑边 + else { + heightMeasureSpec = MeasureSpec.makeMeasureSpec((int) (width / ratio), MeasureSpec.EXACTLY); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } +} diff --git a/app/src/main/res/layout/main_activity.xml b/app/src/main/res/layout/main_activity.xml index 322f30b56..5759d920d 100644 --- a/app/src/main/res/layout/main_activity.xml +++ b/app/src/main/res/layout/main_activity.xml @@ -6,6 +6,7 @@ android:layout_height="match_parent"> - + +