Skip to content

Commit

Permalink
rc: add full rc support include container and shortcut
Browse files Browse the repository at this point in the history
  • Loading branch information
longjunyu2 committed Aug 9, 2024
1 parent 3ea9d07 commit 98f0e21
Show file tree
Hide file tree
Showing 9 changed files with 105 additions and 2 deletions.
9 changes: 9 additions & 0 deletions app/src/main/java/com/winlator/ContainerDetailFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@

import com.winlator.box86_64.Box86_64Preset;
import com.winlator.box86_64.Box86_64PresetManager;
import com.winlator.box86_64.rc.RCManager;
import com.winlator.container.Container;
import com.winlator.container.ContainerManager;
import com.winlator.contentdialog.AddEnvVarDialog;
Expand Down Expand Up @@ -160,6 +161,11 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup r
final Spinner sBox64Preset = view.findViewById(R.id.SBox64Preset);
Box86_64PresetManager.loadSpinner("box64", sBox64Preset, isEditMode() ? container.getBox64Preset() : preferences.getString("box64_preset", Box86_64Preset.COMPATIBILITY));

final Spinner sRCFile = view.findViewById(R.id.SRCFile);
final int[] rcfileIds = {0};
RCManager rcManager = new RCManager(context);
RCManager.loadRCFileSpinner(rcManager, container == null ? 0 : container.getRCFileId(), sRCFile, id -> rcfileIds[0] = id);

final CPUListView cpuListView = view.findViewById(R.id.CPUListView);
final CPUListView cpuListViewWoW64 = view.findViewById(R.id.CPUListViewWoW64);

Expand Down Expand Up @@ -192,6 +198,7 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup r
String box86Preset = Box86_64PresetManager.getSpinnerSelectedId(sBox86Preset);
String box64Preset = Box86_64PresetManager.getSpinnerSelectedId(sBox64Preset);
String desktopTheme = getDesktopTheme(view);
int rcfileId = rcfileIds[0];

if (isEditMode()) {
container.setName(name);
Expand All @@ -211,6 +218,7 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup r
container.setBox86Preset(box86Preset);
container.setBox64Preset(box64Preset);
container.setDesktopTheme(desktopTheme);
container.setRcfileId(rcfileId);
container.saveData();
saveWineRegistryKeys(view);
getActivity().onBackPressed();
Expand All @@ -234,6 +242,7 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup r
data.put("box86Preset", box86Preset);
data.put("box64Preset", box64Preset);
data.put("desktopTheme", desktopTheme);
data.put("rcfileId", rcfileId);

if (wineInfos.size() > 1) {
data.put("wineVersion", wineInfos.get(sWineVersion.getSelectedItemPosition()).identifier());
Expand Down
16 changes: 14 additions & 2 deletions app/src/main/java/com/winlator/XServerDisplayActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import androidx.preference.PreferenceManager;

import com.google.android.material.navigation.NavigationView;
import com.winlator.box86_64.rc.RCFile;
import com.winlator.box86_64.rc.RCManager;
import com.winlator.container.Container;
import com.winlator.container.ContainerManager;
import com.winlator.container.Shortcut;
Expand Down Expand Up @@ -455,6 +457,16 @@ else if (audioDriver.equals("pulseaudio")) {
environment.addComponent(new VirGLRendererComponent(xServer, UnixSocketConfig.createSocket(rootPath, UnixSocketConfig.VIRGL_SERVER_PATH)));
}

RCManager manager = new RCManager(this);
manager.loadRCFiles();
int rcfileId = shortcut == null ? container.getRCFileId() :
Integer.parseInt(shortcut.getExtra("rcfileId", String.valueOf(container.getRCFileId())));
RCFile rcfile = manager.getRcfile(rcfileId);
File file = new File(container.getRootDir(), ".box64rc");
String str = rcfile == null ? "" : rcfile.generateBox86_64rc();
FileUtils.writeString(file, str);
envVars.put("BOX64_RCFILE", file.getAbsolutePath());

guestProgramLauncherComponent.setEnvVars(envVars);
guestProgramLauncherComponent.setTerminationCallback((status) -> exit());
environment.addComponent(guestProgramLauncherComponent);
Expand Down Expand Up @@ -667,7 +679,7 @@ public boolean dispatchGenericMotionEvent(MotionEvent event) {
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
return (!inputControlsView.onKeyEvent(event) && !winHandler.onKeyEvent(event) && xServer.keyboard.onKeyEvent(event)) ||
(!ExternalController.isGameController(event.getDevice()) && super.dispatchKeyEvent(event));
(!ExternalController.isGameController(event.getDevice()) && super.dispatchKeyEvent(event));
}

public InputControlsView getInputControlsView() {
Expand Down Expand Up @@ -723,7 +735,7 @@ private void generateWineprefix() {
TarCompressorUtils.compress(TarCompressorUtils.Type.ZSTD, new File(rootDir, ImageFs.WINEPREFIX), containerPatternFile, MainActivity.CONTAINER_PATTERN_COMPRESSION_LEVEL);

if (!containerPatternFile.renameTo(new File(installedWineDir, containerPatternFile.getName())) ||
!(new File(wineInfo.path)).renameTo(new File(installedWineDir, wineInfo.identifier()))) {
!(new File(wineInfo.path)).renameTo(new File(installedWineDir, wineInfo.identifier()))) {
containerPatternFile.delete();
}

Expand Down
34 changes: 34 additions & 0 deletions app/src/main/java/com/winlator/box86_64/rc/RCManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,13 @@
import android.content.res.AssetManager;
import android.media.MediaScannerConnection;
import android.os.Environment;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

import com.winlator.R;
import com.winlator.core.Callback;
import com.winlator.core.FileUtils;

import org.json.JSONArray;
Expand All @@ -16,6 +22,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
Expand Down Expand Up @@ -239,4 +246,31 @@ public void removeRCFile(RCFile rcfile) {
File file = RCFile.getRCFile(context, rcfile.id);
if (file.isFile() && file.delete()) rcfiles.remove(rcfile);
}

public static void loadRCFileSpinner(RCManager rcManager, int rcfileId, Spinner spinner, Callback<Integer> callback) {
Context context = spinner.getContext();
rcManager.loadRCFiles();
List<RCFile> rcFiles = rcManager.getRCFiles();

List<String> filesName = new ArrayList<>();
filesName.add(context.getString(R.string.no_profile_selected));
for (RCFile rcfile : rcFiles)
filesName.add(rcfile.getName());

spinner.setAdapter(new ArrayAdapter<>(context, android.R.layout.simple_spinner_dropdown_item, filesName));
RCFile currentRCFile = rcManager.getRcfile(rcfileId);

spinner.setSelection(currentRCFile == null ? 0 : rcFiles.indexOf(currentRCFile) + 1);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
callback.call(position == 0 ? 0 : rcFiles.get(position - 1).id);
}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
});
}
}
13 changes: 13 additions & 0 deletions app/src/main/java/com/winlator/container/Container.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ public class Container {
private String box64Preset = Box86_64Preset.COMPATIBILITY;
private File rootDir;
private JSONObject extraData;
private int rcfileId = 0;

public Container(int id) {
this.id = id;
Expand Down Expand Up @@ -260,6 +261,14 @@ public void setDesktopTheme(String desktopTheme) {
this.desktopTheme = desktopTheme;
}

public int getRCFileId() {
return rcfileId;
}

public void setRcfileId(int id) {
rcfileId = id;
}

public Iterable<String[]> drivesIterator() {
return drivesIterator(drives);
}
Expand Down Expand Up @@ -306,6 +315,7 @@ public void saveData() {
data.put("box64Preset", box64Preset);
data.put("desktopTheme", desktopTheme);
data.put("extraData", extraData);
data.put("rcfileId", rcfileId);

if (!WineInfo.isMainWineVersion(wineVersion)) data.put("wineVersion", wineVersion);
FileUtils.writeString(getConfigFile(), data.toString());
Expand Down Expand Up @@ -381,6 +391,9 @@ public void loadData(JSONObject data) throws JSONException {
case "desktopTheme" :
setDesktopTheme(data.getString(key));
break;
case "rcfileId" :
setRcfileId(data.getInt(key));
break;
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ private void duplicateContainer(Container srcContainer) {
dstContainer.setBox86Preset(srcContainer.getBox86Preset());
dstContainer.setBox64Preset(srcContainer.getBox64Preset());
dstContainer.setDesktopTheme(srcContainer.getDesktopTheme());
dstContainer.setRcfileId(srcContainer.getRCFileId());
dstContainer.saveData();

maxContainerId++;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.winlator.R;
import com.winlator.ShortcutsFragment;
import com.winlator.box86_64.Box86_64PresetManager;
import com.winlator.box86_64.rc.RCManager;
import com.winlator.container.Shortcut;
import com.winlator.core.AppUtils;
import com.winlator.core.EnvVars;
Expand Down Expand Up @@ -78,6 +79,14 @@ private void createContentView() {
final Spinner sBox64Preset = findViewById(R.id.SBox64Preset);
Box86_64PresetManager.loadSpinner("box64", sBox64Preset, shortcut.getExtra("box64Preset", shortcut.container.getBox64Preset()));

final Spinner sRCFile = findViewById(R.id.SRCFile);
final int[] rcfileIds = {0};
RCManager manager = new RCManager(context);
String rcfileId = shortcut.getExtra("rcfileId", String.valueOf(shortcut.container.getRCFileId()));
RCManager.loadRCFileSpinner(manager, Integer.parseInt(rcfileId), sRCFile, id -> {
rcfileIds[0] = id;
});

final Spinner sControlsProfile = findViewById(R.id.SControlsProfile);
loadControlsProfileSpinner(sControlsProfile, shortcut.getExtra("controlsProfile", "0"));

Expand Down Expand Up @@ -133,6 +142,8 @@ private void createContentView() {
shortcut.putExtra("box86Preset", !box86Preset.equals(shortcut.container.getBox86Preset()) ? box86Preset : null);
shortcut.putExtra("box64Preset", !box64Preset.equals(shortcut.container.getBox64Preset()) ? box64Preset : null);

shortcut.putExtra("rcfileId", rcfileIds[0] != shortcut.container.getRCFileId() ? Integer.toString(rcfileIds[0]) : null);

int dinputMapperType = sDInputMapperType.getSelectedItemPosition();
ArrayList<ControlsProfile> profiles = inputControlsManager.getProfiles(true);
int controlsProfile = sControlsProfile.getSelectedItemPosition() > 0 ? profiles.get(sControlsProfile.getSelectedItemPosition()-1).id : 0;
Expand Down
10 changes: 10 additions & 0 deletions app/src/main/res/layout/container_detail_fragment.xml
Original file line number Diff line number Diff line change
Expand Up @@ -503,6 +503,16 @@
style="@style/ComboBox"
android:id="@+id/SBox64Preset"
android:layout_width="match_parent" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/box86_64_rc_files" />

<Spinner
style="@style/ComboBox"
android:id="@+id/SRCFile"
android:layout_width="match_parent" />
</LinearLayout>

<TextView
Expand Down
12 changes: 12 additions & 0 deletions app/src/main/res/layout/shortcut_settings_dialog.xml
Original file line number Diff line number Diff line change
Expand Up @@ -264,11 +264,13 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:text="@string/box86_preset" />

<Spinner
style="@style/ComboBox"
android:id="@+id/SBox86Preset"
android:visibility="gone"
android:layout_width="match_parent" />

<TextView
Expand All @@ -280,6 +282,16 @@
style="@style/ComboBox"
android:id="@+id/SBox64Preset"
android:layout_width="match_parent" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/box86_64_rc_files" />

<Spinner
style="@style/ComboBox"
android:id="@+id/SRCFile"
android:layout_width="match_parent" />
</LinearLayout>

<TextView
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -263,4 +263,5 @@
<string name="cannot_remove_default_profile">Cannot remove default profile.</string>
<string name="cannot_edit_default_profile">Cannot edit default profile.</string>
<string name="do_you_want_to_restore_default_profile">Do you want to restore default profile?</string>
<string name="box86_64_rc_files">RC File</string>
</resources>

0 comments on commit 98f0e21

Please sign in to comment.