Skip to content

Commit

Permalink
background image
Browse files Browse the repository at this point in the history
  • Loading branch information
weihuoya committed Apr 6, 2021
1 parent 86d4824 commit 0c177ef
Show file tree
Hide file tree
Showing 118 changed files with 1,696 additions and 1,096 deletions.
9 changes: 9 additions & 0 deletions src/android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:xlargeScreens="true" />

<application
android:label="Citra"
android:icon="@mipmap/ic_citra"
Expand All @@ -25,6 +31,8 @@
android:requestLegacyExternalStorage="true"
android:banner="@mipmap/ic_citra">

<meta-data android:name="android.max_aspect" android:value="2.4" />

<activity
android:name=".ui.MainActivity"
android:theme="@style/CitraBase">
Expand All @@ -51,6 +59,7 @@

<activity
android:name=".ui.EmulationActivity"
android:configChanges="orientation|screenSize"
android:resizeableActivity="false"
android:launchMode="singleTop"
android:theme="@style/CitraEmulationBase"/>
Expand Down
1 change: 1 addition & 0 deletions src/android/app/src/main/assets/3dstdb-zh_CN.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
000400300000A102 = Home Menu
000400300000A902 = Home Menu
000400300000B102 = Home Menu
0004000000157900 = 皇牌空战3D 战火纷飞+
0004000000190B00 = 沙漠老鼠团
0004000000120800 = 海岛之日
00040000001ACD00 = 勇气地牢
Expand Down
69 changes: 67 additions & 2 deletions src/android/app/src/main/java/org/citra/emu/NativeLibrary.java
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ public static void handleNFCScanning(boolean isScanning) {
}
}

public static void saveImageToFile(String path, int width, int height, int[] pixels) {
public static void saveImageToFile(String path, int[] pixels, int width, int height) {
if (pixels.length > 0 && width > 0 && height > 0) {
File file = new File(path);
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Expand Down Expand Up @@ -128,6 +128,69 @@ public static void pickImage(int width, int height) {
}
}

public static boolean checkPermission(String permission) {
EmulationActivity activity = EmulationActivity.get();
if (activity != null) {
return activity.checkPermission(permission);
} else {
return false;
}
}

public static int getDisplayRotation() {
EmulationActivity activity = EmulationActivity.get();
if (activity != null) {
return activity.getDisplayRotation();
} else {
return 0;
}
}

public static int getSafeInsetLeft() {
EmulationActivity activity = EmulationActivity.get();
if (activity != null) {
return activity.getSafeInsetLeft();
} else {
return 0;
}
}

public static int getSafeInsetTop() {
EmulationActivity activity = EmulationActivity.get();
if (activity != null) {
return activity.getSafeInsetTop();
} else {
return 0;
}
}

public static int getSafeInsetRight() {
EmulationActivity activity = EmulationActivity.get();
if (activity != null) {
return activity.getSafeInsetRight();
} else {
return 0;
}
}

public static int getSafeInsetBottom() {
EmulationActivity activity = EmulationActivity.get();
if (activity != null) {
return activity.getSafeInsetBottom();
} else {
return 0;
}
}

public static float getScaleDensity() {
EmulationActivity activity = EmulationActivity.get();
if (activity != null) {
return activity.getScaleDensity();
} else {
return 1;
}
}

public static void setupTranslater(String key, String secret) {
TranslateHelper.Initialize(key, secret);
}
Expand Down Expand Up @@ -175,7 +238,7 @@ public static boolean isValidFile(String filename) {
name.endsWith(".cxi") || name.endsWith(".app") || name.endsWith(".3dsx"));
}

public static void AddNetPlayMessage(int type, String message) {
public static void addNetPlayMessage(int type, String message) {
NetPlayManager.AddNetPlayMessage(type, message);
}

Expand All @@ -195,6 +258,8 @@ public static void AddNetPlayMessage(int type, String message) {

public static native void HandleImage(int[] pixels, int width, int height);

public static native void SetBackgroundImage(int[] pixels, int width, int height);

public static native void ResetCamera();

public static native void Screenshot(OnScreenshotCompleteListener listener);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,16 @@
import android.graphics.Rect;
import androidx.preference.PreferenceManager;

import android.os.AsyncTask;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;

import org.citra.emu.NativeLibrary.ButtonType;
import org.citra.emu.R;
import org.citra.emu.utils.DirectoryInitialization;
import org.citra.emu.ui.EmulationActivity;

public final class InputOverlay extends View {
public static final String PREF_CONTROLLER_INIT = "InitOverlay";
Expand All @@ -38,22 +36,6 @@ public final class InputOverlay extends View {
public static boolean sHideInputOverlay = false;
public static boolean sShowRightJoystick = false;

@SuppressLint("StaticFieldLeak")
private class InitTask extends AsyncTask<Context, Void, Map<Integer, Bitmap>> {
@Override
protected Map<Integer, Bitmap> doInBackground(Context... contexts) {
return DirectoryInitialization.loadInputOverlay(contexts[0]);
}

@Override
protected void onPostExecute(Map<Integer, Bitmap> result) {
mBitmaps = result;
refreshControls();
invalidate();
}
}

private Map<Integer, Bitmap> mBitmaps;
private final ArrayList<InputOverlayButton> mButtons = new ArrayList<>();
private final ArrayList<InputOverlayDpad> mDpads = new ArrayList<>();
private final ArrayList<InputOverlayJoystick> mJoysticks = new ArrayList<>();
Expand All @@ -79,8 +61,6 @@ public InputOverlay(Context context, AttributeSet attrs) {
sControllerAlpha = mPreferences.getInt(InputOverlay.PREF_CONTROLLER_ALPHA, 100);
sHideInputOverlay = mPreferences.getBoolean(InputOverlay.PREF_CONTROLLER_HIDE, false);
sShowRightJoystick = mPreferences.getBoolean(InputOverlay.PREF_SHOW_RIGHT_JOYSTICK, false);

new InitTask().execute(context);
}

private void defaultOverlay() {
Expand Down Expand Up @@ -386,10 +366,6 @@ private void saveControlPosition(int buttonId, Rect bounds) {
}

public void refreshControls() {
if (mBitmaps == null) {
return;
}

// Remove all the overlay buttons
mIsLandscape =
getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
Expand Down Expand Up @@ -577,21 +553,7 @@ private InputOverlayJoystick initializeJoystick(int joystick) {
}

public Bitmap getInputBitmap(int id, float scale) {
// Determine the button size based on the smaller screen dimension.
// This makes sure the buttons are the same size in both portrait and landscape.
DisplayMetrics dm = getResources().getDisplayMetrics();
int dimension = (int)(Math.min(dm.widthPixels, dm.heightPixels) * scale);
Bitmap bitmap = mBitmaps.get(id);
int dstWidth = bitmap.getWidth();
int dstHeight = bitmap.getHeight();
if (dstWidth > dstHeight) {
dstWidth = dstWidth * dimension / dstHeight;
dstHeight = dimension;
} else {
dstHeight = dstHeight * dimension / dstWidth;
dstWidth = dimension;
}
return Bitmap.createScaledBitmap(mBitmaps.get(id), dstWidth, dstHeight, true);
return ((EmulationActivity)getContext()).getInputBitmap(id, scale);
}

public boolean isInEditMode() {
Expand Down Expand Up @@ -619,6 +581,7 @@ public void setInEditMode(boolean mode) {
R.drawable.dpad, R.drawable.dpad_pressed_one, R.drawable.dpad_pressed_two,
R.drawable.joystick, R.drawable.joystick_pressed, R.drawable.joystick_range,
R.drawable.c_stick, R.drawable.c_stick_pressed, R.drawable.c_stick_range,
R.drawable.bg_landscape, R.drawable.bg_portrait
};
public static final String[] ResNames = {
"a.png", "a_pressed.png",
Expand All @@ -636,6 +599,7 @@ public void setInEditMode(boolean mode) {
"three.png", "three_pressed.png",
"dpad.png", "dpad_pressed_one.png", "dpad_pressed_two.png",
"joystick.png", "joystick_pressed.png", "joystick_range.png",
"c_stick.png", "c_stick_pressed.png", "c_stick_range.png"
"c_stick.png", "c_stick_pressed.png", "c_stick_range.png",
"bg_landscape.jpg", "bg_portrait.jpg"
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import org.citra.emu.settings.model.SettingSection;

public final class Settings {

public static final String SECTION_INI_CORE = "Core";
public static final String SECTION_INI_RENDERER = "Renderer";
public static final String SECTION_INI_AUDIO = "Audio";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ public final class SettingsFile {
// ocr
public static final String KEY_BAIDU_OCR_KEY = "baidu_ocr_key";
public static final String KEY_BAIDU_OCR_SECRET = "baidu_ocr_secret";
// theme
public static final String KEY_THEME_PACKAGE = "theme_package";
// controls
public static final String KEY_BUTTON_A = "button_a";
public static final String KEY_BUTTON_B = "button_b";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ private ArrayList<SettingsItem> loadSettingsList() {
R.array.shaderValues, 1, shaderType));
// post process shaders
String[] stringValues = getShaderValues();
String[] stringEntries = getShaderEntries(stringValues);
String[] stringEntries = getSettingEntries(stringValues);
sl.add(new StringSingleChoiceSetting(
SettingsFile.KEY_POST_PROCESSING_SHADER, Settings.SECTION_INI_RENDERER,
R.string.post_processing_shader, 0, stringEntries, stringValues, "", shader));
Expand All @@ -181,6 +181,7 @@ private ArrayList<SettingsItem> loadSettingsList() {
Setting systemRegion = coreSection.getSetting(SettingsFile.KEY_SYSTEM_REGION);
Setting cpuJIT = coreSection.getSetting(SettingsFile.KEY_USE_CPU_JIT);
Setting language = coreSection.getSetting(SettingsFile.KEY_SYSTEM_LANGUAGE);
Setting theme = coreSection.getSetting(SettingsFile.KEY_THEME_PACKAGE);

sl.add(new CheckBoxSetting(SettingsFile.KEY_IS_NEW_3DS, Settings.SECTION_INI_CORE,
R.string.setting_is_new_3ds, R.string.setting_is_new_3ds_desc, false, isNew3DS));
Expand All @@ -194,6 +195,17 @@ private ArrayList<SettingsItem> loadSettingsList() {
R.string.setting_system_language, 0,
R.array.languageNames, R.array.languageValues, 1,
language));
sl.add(new SingleChoiceSetting(SettingsFile.KEY_SYSTEM_LANGUAGE, Settings.SECTION_INI_CORE,
R.string.setting_system_language, 0,
R.array.languageNames, R.array.languageValues, 1,
language));

// theme
stringValues = getThemeValues();
stringEntries = getSettingEntries(stringValues);
sl.add(new StringSingleChoiceSetting(
SettingsFile.KEY_THEME_PACKAGE, Settings.SECTION_INI_CORE,
R.string.setting_theme_package, 0, stringEntries, stringValues, "default", theme));

// audio
sl.add(new HeaderSetting(null, null, R.string.setting_header_audio, 0));
Expand Down Expand Up @@ -328,32 +340,44 @@ private String capitalize(String text) {
return text.substring(0, 1).toUpperCase() + text.substring(1);
}

private String[] getShaderEntries(String[] values) {
private String[] getSettingEntries(String[] values) {
String[] entries = new String[values.length];
entries[0] = mActivity.getString(R.string.off);
for (int i = 1; i < values.length; ++i) {
entries[i] = capitalize(values[i]);
for (int i = 0; i < values.length; ++i) {
if (values[i].isEmpty()) {
entries[i] = mActivity.getString(R.string.off);
} else {
entries[i] = capitalize(values[i]);
}
}
return entries;
}

private String[] getShaderValues() {
String path = DirectoryInitialization.getShadersDirectory();
List<String> values = getFileList(path, ".glsl");
values.add(0, "");
return values.toArray(new String[0]);
}

private String[] getThemeValues() {
String path = DirectoryInitialization.getThemeDirectory();
List<String> values = getFileList(path, ".zip");
return values.toArray(new String[0]);
}

private List<String> getFileList(String path, String ext) {
List<String> values = new ArrayList<>();
values.add("");

String shadersPath = DirectoryInitialization.getShadersDirectory();
File file = new File(shadersPath);
File[] shaderFiles = file.listFiles();
if (shaderFiles != null) {
for (int i = 0; i < shaderFiles.length; ++i) {
String name = shaderFiles[i].getName();
int extensionIndex = name.indexOf(".glsl");
File file = new File(path);
File[] files = file.listFiles();
if (files != null) {
for (int i = 0; i < files.length; ++i) {
String name = files[i].getName();
int extensionIndex = name.indexOf(ext);
if (extensionIndex > 0) {
values.add(name.substring(0, extensionIndex));
}
}
}

return values.toArray(new String[0]);
return values;
}
}
Loading

0 comments on commit 0c177ef

Please sign in to comment.