From c17c2307c744af954e3e3e053059405613f81955 Mon Sep 17 00:00:00 2001 From: GabrielBRDeveloper Date: Mon, 18 Dec 2023 16:10:11 -0400 Subject: [PATCH] Final ui update --- .../panda3ds/pandroid/app/BaseActivity.java | 41 ++++++++- .../pandroid/app/main/SettingsFragment.java | 2 + .../preferences/AppearancePreferences.java | 28 ++++++ .../app/preferences/InputMapPreferences.java | 25 +++++- .../pandroid/data/config/GlobalConfig.java | 7 ++ .../pandroid/data/game/GameMetadata.java | 6 +- .../com/panda3ds/pandroid/input/InputMap.java | 2 +- .../panda3ds/pandroid/utils/FileUtils.java | 27 ------ .../pandroid/view/gamesgrid/ItemHolder.java | 2 + .../SingleSelectionPreferences.java | 84 ++++++++++++++++++ .../bottom_navigation_indicator_tint.xml | 5 ++ .../main/res/color/text_secondary_dark.xml | 9 ++ .../main/res/color/text_secondary_light.xml | 8 ++ .../app/src/main/res/drawable/ic_done.xml | 5 ++ .../app/src/main/res/drawable/ic_theme.xml | 5 ++ .../app/src/main/res/drawable/temp_thumb.jpg | Bin 51816 -> 0 bytes .../main/res/layout-land/activity_main.xml | 3 +- .../app/src/main/res/layout/activity_main.xml | 3 +- .../app/src/main/res/layout/holder_game.xml | 4 +- .../main/res/layout/preference_start_item.xml | 2 +- .../src/main/res/values-pt-rBR/strings.xml | 11 +++ .../app/src/main/res/values/strings.xml | 11 +++ .../app/src/main/res/values/styleable.xml | 19 +++- .../app/src/main/res/values/themes.xml | 69 +++++++++++++- .../main/res/xml/appearance_preference.xml | 14 +++ .../main/res/xml/input_map_preferences.xml | 13 +++ .../src/main/res/xml/start_preferences.xml | 29 +++--- 27 files changed, 384 insertions(+), 50 deletions(-) create mode 100644 src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/AppearancePreferences.java create mode 100644 src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/preferences/SingleSelectionPreferences.java create mode 100644 src/pandroid/app/src/main/res/color/bottom_navigation_indicator_tint.xml create mode 100644 src/pandroid/app/src/main/res/color/text_secondary_dark.xml create mode 100644 src/pandroid/app/src/main/res/color/text_secondary_light.xml create mode 100644 src/pandroid/app/src/main/res/drawable/ic_done.xml create mode 100644 src/pandroid/app/src/main/res/drawable/ic_theme.xml delete mode 100644 src/pandroid/app/src/main/res/drawable/temp_thumb.jpg create mode 100644 src/pandroid/app/src/main/res/xml/appearance_preference.xml diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/BaseActivity.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/BaseActivity.java index 72926b076..2462b5958 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/BaseActivity.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/BaseActivity.java @@ -1,5 +1,44 @@ package com.panda3ds.pandroid.app; +import android.os.Bundle; + +import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; -public class BaseActivity extends AppCompatActivity {} +import com.panda3ds.pandroid.R; +import com.panda3ds.pandroid.data.config.GlobalConfig; + +public class BaseActivity extends AppCompatActivity { + private int currentTheme = GlobalConfig.get(GlobalConfig.KEY_APP_THEME); + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + applyTheme(); + super.onCreate(savedInstanceState); + } + + @Override + protected void onResume() { + super.onResume(); + if (GlobalConfig.get(GlobalConfig.KEY_APP_THEME) != currentTheme){ + recreate(); + } + } + + private void applyTheme(){ + switch (GlobalConfig.get(GlobalConfig.KEY_APP_THEME)){ + case GlobalConfig.VALUE_THEME_ANDROID: + setTheme(R.style.Theme_Pandroid); + break; + case GlobalConfig.VALUE_THEME_LIGHT: + setTheme(R.style.Theme_Pandroid_Light); + break; + case GlobalConfig.VALUE_THEME_DARK: + setTheme(R.style.Theme_Pandroid_Dark); + break; + case GlobalConfig.VALUE_THEME_BLACK: + setTheme(R.style.Theme_Pandroid_Black); + break; + } + currentTheme = GlobalConfig.get(GlobalConfig.KEY_APP_THEME); + } +} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/main/SettingsFragment.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/main/SettingsFragment.java index 22f888fea..08f2d70f8 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/main/SettingsFragment.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/main/SettingsFragment.java @@ -8,11 +8,13 @@ import com.panda3ds.pandroid.app.PreferenceActivity; import com.panda3ds.pandroid.app.base.BasePreferenceFragment; import com.panda3ds.pandroid.app.preferences.InputMapPreferences; +import com.panda3ds.pandroid.app.preferences.AppearancePreferences; public class SettingsFragment extends BasePreferenceFragment { @Override public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { setPreferencesFromResource(R.xml.start_preferences, rootKey); setItemClick("inputMap", (item) -> PreferenceActivity.launch(requireContext(), InputMapPreferences.class)); + setItemClick("appearance", (item)-> PreferenceActivity.launch(requireContext(), AppearancePreferences.class)); } } diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/AppearancePreferences.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/AppearancePreferences.java new file mode 100644 index 000000000..63f79ddb4 --- /dev/null +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/AppearancePreferences.java @@ -0,0 +1,28 @@ +package com.panda3ds.pandroid.app.preferences; + +import android.app.Activity; +import android.os.Bundle; + +import androidx.annotation.Nullable; + +import com.panda3ds.pandroid.R; +import com.panda3ds.pandroid.app.BaseActivity; +import com.panda3ds.pandroid.app.base.BasePreferenceFragment; +import com.panda3ds.pandroid.data.config.GlobalConfig; +import com.panda3ds.pandroid.view.preferences.SingleSelectionPreferences; + +public class AppearancePreferences extends BasePreferenceFragment { + @Override + public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { + setPreferencesFromResource(R.xml.appearance_preference, rootKey); + + ((BaseActivity) requireActivity()).getSupportActionBar().setTitle(R.string.appearance); + + SingleSelectionPreferences themePreference = findPreference("theme"); + themePreference.setSelectedItem(GlobalConfig.get(GlobalConfig.KEY_APP_THEME)); + themePreference.setOnPreferenceChangeListener((preference, value) -> { + GlobalConfig.set(GlobalConfig.KEY_APP_THEME, (int) value); + return false; + }); + } +} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/InputMapPreferences.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/InputMapPreferences.java index 007920bd9..00f031ac9 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/InputMapPreferences.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/InputMapPreferences.java @@ -8,8 +8,10 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.preference.Preference; +import androidx.preference.SeekBarPreference; import com.panda3ds.pandroid.R; +import com.panda3ds.pandroid.app.BaseActivity; import com.panda3ds.pandroid.app.base.BasePreferenceFragment; import com.panda3ds.pandroid.input.InputMap; import com.panda3ds.pandroid.input.KeyName; @@ -19,16 +21,35 @@ public class InputMapPreferences extends BasePreferenceFragment implements Activ private ActivityResultLauncher requestKey; private String currentKey; + private SeekBarPreference deadZonePreference; + @Override public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { setPreferencesFromResource(R.xml.input_map_preferences, rootKey); + + ((BaseActivity) requireActivity()).getSupportActionBar().setTitle(R.string.controller_mapping); + for (KeyName key : KeyName.values()) { - if (key == KeyName.NULL) return; + if (key == KeyName.NULL) continue; setItemClick(key.name(), this::onItemPressed); } + + deadZonePreference = getPreferenceScreen().findPreference("dead_zone"); + + deadZonePreference.setOnPreferenceChangeListener((preference, value) -> { + InputMap.setDeadZone(((int)value/100.0f)); + refreshList(); + return false; + }); + refreshList(); } + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + @Override public void onAttach(@NonNull Context context) { super.onAttach(context); @@ -56,6 +77,8 @@ public void onResume() { } private void refreshList() { + deadZonePreference.setValue((int)(InputMap.getDeadZone()*100)); + deadZonePreference.setSummary(deadZonePreference.getValue()+"%"); for (KeyName key : KeyName.values()) { if (key == KeyName.NULL) continue; findPreference(key.name()).setSummary(InputMap.relative(key)); diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/config/GlobalConfig.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/config/GlobalConfig.java index ddfee09e2..95af3801d 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/config/GlobalConfig.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/config/GlobalConfig.java @@ -11,6 +11,13 @@ public class GlobalConfig { private static SharedPreferences data; + public static final int VALUE_THEME_ANDROID = 0; + public static final int VALUE_THEME_LIGHT = 1; + public static final int VALUE_THEME_DARK = 2; + public static final int VALUE_THEME_BLACK = 3; + + public static final Key KEY_APP_THEME = new Key<>("app.theme", VALUE_THEME_ANDROID); + public static void initialize() { data = PandroidApplication.getAppContext() .getSharedPreferences(Constants.PREF_GLOBAL_CONFIG, Context.MODE_PRIVATE); diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/game/GameMetadata.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/game/GameMetadata.java index 464073026..325ce1e71 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/game/GameMetadata.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/game/GameMetadata.java @@ -1,5 +1,7 @@ package com.panda3ds.pandroid.data.game; +import android.graphics.Bitmap; + import java.util.UUID; public class GameMetadata { @@ -7,7 +9,7 @@ public class GameMetadata { private final String id; private final String romPath; private final String title; - private final int[] icon = new int[48 * 48]; + private transient final Bitmap icon = Bitmap.createBitmap(48,48, Bitmap.Config.RGB_565); private final String publisher; private final GameRegion[] regions = new GameRegion[]{GameRegion.None}; @@ -34,7 +36,7 @@ public String getPublisher() { return publisher; } - public int[] getIcon() { + public Bitmap getIcon() { return icon; } diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/input/InputMap.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/input/InputMap.java index 6e61345cb..b94ceaace 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/input/InputMap.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/input/InputMap.java @@ -36,7 +36,7 @@ public static KeyName relative(String name) { } public static void setDeadZone(float value) { - data.edit().putFloat(KEY_DEAD_ZONE, Math.max(0, Math.min(1.0F, value))).apply(); + data.edit().putFloat(KEY_DEAD_ZONE, Math.max(0.0f, Math.min(1.0f, value))).apply(); } } diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/FileUtils.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/FileUtils.java index 4ebd7241f..a22c4842f 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/FileUtils.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/FileUtils.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; -import android.os.ParcelFileDescriptor; -import android.util.Log; import androidx.documentfile.provider.DocumentFile; @@ -27,15 +25,6 @@ public static String getName(String path) { return file.getName(); } - public static long getSize(String path) { - return DocumentFile.fromSingleUri(getContext(), parseUri(path)).length(); - } - - - public static String getCacheDir() { - return getContext().getCacheDir().getAbsolutePath(); - } - public static void makeUriPermanent(String uri, String mode) { int flags = Intent.FLAG_GRANT_READ_URI_PERMISSION; @@ -44,20 +33,4 @@ public static void makeUriPermanent(String uri, String mode) { getContext().getContentResolver().takePersistableUriPermission(parseUri(uri), flags); } - - public static int openContentUri(String path, String mode) { - try { - Uri uri = parseUri(path); - ParcelFileDescriptor descriptor = getContext().getContentResolver().openFileDescriptor(uri, mode); - int fd = descriptor.getFd(); - descriptor.detachFd(); - descriptor.close(); - return fd; - } catch (Exception e) { - Log.e(Constants.LOG_TAG, "Error on openContentUri: " + e); - } - - return -1; - } - } diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/ItemHolder.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/ItemHolder.java index d2ccba1fe..54f86daea 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/ItemHolder.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/gamesgrid/ItemHolder.java @@ -18,6 +18,8 @@ public ItemHolder(@NonNull View itemView) { public void apply(GameMetadata game) { ((AppCompatTextView) itemView.findViewById(R.id.title)) .setText(game.getTitle()); + ((GameIconView) itemView.findViewById(R.id.icon)) + .setImageBitmap(game.getIcon()); ((AppCompatTextView) itemView.findViewById(R.id.description)) .setText(game.getPublisher()); diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/preferences/SingleSelectionPreferences.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/preferences/SingleSelectionPreferences.java new file mode 100644 index 000000000..f4ddfd12b --- /dev/null +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/preferences/SingleSelectionPreferences.java @@ -0,0 +1,84 @@ +package com.panda3ds.pandroid.view.preferences; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.util.AttributeSet; +import android.util.Log; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.preference.Preference; +import androidx.preference.PreferenceCategory; + +import com.panda3ds.pandroid.R; +import com.panda3ds.pandroid.utils.Constants; + +public class SingleSelectionPreferences extends PreferenceCategory implements Preference.OnPreferenceClickListener { + private final Drawable transparent = new ColorDrawable(Color.TRANSPARENT); + private final Drawable doneDrawable = ContextCompat.getDrawable(getContext(), R.drawable.ic_done); + + public SingleSelectionPreferences(@NonNull Context context) { + super(context); + } + + public SingleSelectionPreferences(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public SingleSelectionPreferences(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public SingleSelectionPreferences(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + { + try { + TypedArray color = getContext().obtainStyledAttributes(new int[]{ + android.R.attr.textColorSecondary + }); + doneDrawable.setTint(color.getColor(0, Color.RED)); + color.recycle(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + color.close(); + } + } catch (Exception e) { + Log.e(Constants.LOG_TAG, "Error on obtain text color secondary: ", e); + } + } + + @Override + public void onAttached() { + super.onAttached(); + for (int i = 0; i < getPreferenceCount();i++) { + getPreference(i).setOnPreferenceClickListener(this); + } + } + + public void setSelectedItem(int index){ + onPreferenceClick(getPreference(index)); + } + + @Override + public boolean onPreferenceClick(@NonNull Preference preference) { + int index = 0; + for (int i = 0; i < getPreferenceCount(); i++){ + Preference item = getPreference(i); + if (item == preference){ + index = i; + item.setIcon(R.drawable.ic_done); + } else { + item.setIcon(transparent); + } + } + + callChangeListener(index); + return false; + } +} diff --git a/src/pandroid/app/src/main/res/color/bottom_navigation_indicator_tint.xml b/src/pandroid/app/src/main/res/color/bottom_navigation_indicator_tint.xml new file mode 100644 index 000000000..e0fc91122 --- /dev/null +++ b/src/pandroid/app/src/main/res/color/bottom_navigation_indicator_tint.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/color/text_secondary_dark.xml b/src/pandroid/app/src/main/res/color/text_secondary_dark.xml new file mode 100644 index 000000000..53a9cd158 --- /dev/null +++ b/src/pandroid/app/src/main/res/color/text_secondary_dark.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/color/text_secondary_light.xml b/src/pandroid/app/src/main/res/color/text_secondary_light.xml new file mode 100644 index 000000000..351360585 --- /dev/null +++ b/src/pandroid/app/src/main/res/color/text_secondary_light.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/drawable/ic_done.xml b/src/pandroid/app/src/main/res/drawable/ic_done.xml new file mode 100644 index 000000000..25e52514c --- /dev/null +++ b/src/pandroid/app/src/main/res/drawable/ic_done.xml @@ -0,0 +1,5 @@ + + + diff --git a/src/pandroid/app/src/main/res/drawable/ic_theme.xml b/src/pandroid/app/src/main/res/drawable/ic_theme.xml new file mode 100644 index 000000000..c3d2c7b31 --- /dev/null +++ b/src/pandroid/app/src/main/res/drawable/ic_theme.xml @@ -0,0 +1,5 @@ + + + diff --git a/src/pandroid/app/src/main/res/drawable/temp_thumb.jpg b/src/pandroid/app/src/main/res/drawable/temp_thumb.jpg deleted file mode 100644 index e66782be3443db4a00c8ea22027718fb270ae2bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51816 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 + app:labelVisibilityMode="selected" + style="@style/ThemedNavigationBottom"/> \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/activity_main.xml b/src/pandroid/app/src/main/res/layout/activity_main.xml index 1facabd35..6de640209 100644 --- a/src/pandroid/app/src/main/res/layout/activity_main.xml +++ b/src/pandroid/app/src/main/res/layout/activity_main.xml @@ -23,6 +23,7 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toBottomOf="@id/fragment_container" app:labelVisibilityMode="selected" - app:menu="@menu/main_activity_navigation"/> + app:menu="@menu/main_activity_navigation" + style="@style/ThemedNavigationBottom"/> \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/layout/holder_game.xml b/src/pandroid/app/src/main/res/layout/holder_game.xml index 169896e6a..b2d46d1b4 100644 --- a/src/pandroid/app/src/main/res/layout/holder_game.xml +++ b/src/pandroid/app/src/main/res/layout/holder_game.xml @@ -13,11 +13,11 @@ app:cardCornerRadius="16dp"> + android:background="?colorSurfaceVariant"/> diff --git a/src/pandroid/app/src/main/res/layout/preference_start_item.xml b/src/pandroid/app/src/main/res/layout/preference_start_item.xml index 35aa55548..ecb10436a 100644 --- a/src/pandroid/app/src/main/res/layout/preference_start_item.xml +++ b/src/pandroid/app/src/main/res/layout/preference_start_item.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="70dp" - android:layout_marginVertical="10dp" + android:layout_marginVertical="4dp" android:layout_marginHorizontal="10dp" android:background="@drawable/simple_card_background" android:backgroundTint="?colorSurfaceVariant"> diff --git a/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml b/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml index 90e533a74..e57feab59 100644 --- a/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml +++ b/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml @@ -13,4 +13,15 @@ Outros Pressione qualquer tecla Eixos + Zona Morta + Opções + Mapeie um controle ou teclado + Mapeamento de controle + Tema + Defina a aparência do aplicativo + Aparência + Mesmo do dispositivo + Claro + Escuro + Preto \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/values/strings.xml b/src/pandroid/app/src/main/res/values/strings.xml index b7855ecac..973e7acb4 100644 --- a/src/pandroid/app/src/main/res/values/strings.xml +++ b/src/pandroid/app/src/main/res/values/strings.xml @@ -14,4 +14,15 @@ Others Press any key Axis + Dead zone + Options + Map physics controller or keyboard + Controller Mapping + Theme + Set application theme + Appearance + Device + Light + Dark + Black \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/values/styleable.xml b/src/pandroid/app/src/main/res/values/styleable.xml index 32e51685b..c4bce805a 100644 --- a/src/pandroid/app/src/main/res/values/styleable.xml +++ b/src/pandroid/app/src/main/res/values/styleable.xml @@ -1,5 +1,8 @@ + + - + + + + \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/values/themes.xml b/src/pandroid/app/src/main/res/values/themes.xml index 812da8ea5..c7d790808 100644 --- a/src/pandroid/app/src/main/res/values/themes.xml +++ b/src/pandroid/app/src/main/res/values/themes.xml @@ -1,9 +1,76 @@ - + + + + + + + + \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/xml/appearance_preference.xml b/src/pandroid/app/src/main/res/xml/appearance_preference.xml new file mode 100644 index 000000000..dd1ed4831 --- /dev/null +++ b/src/pandroid/app/src/main/res/xml/appearance_preference.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/pandroid/app/src/main/res/xml/input_map_preferences.xml b/src/pandroid/app/src/main/res/xml/input_map_preferences.xml index 25b224d13..fbb6221fa 100644 --- a/src/pandroid/app/src/main/res/xml/input_map_preferences.xml +++ b/src/pandroid/app/src/main/res/xml/input_map_preferences.xml @@ -2,6 +2,19 @@ + + + + + + diff --git a/src/pandroid/app/src/main/res/xml/start_preferences.xml b/src/pandroid/app/src/main/res/xml/start_preferences.xml index 48c8d7a93..57a6d32c0 100644 --- a/src/pandroid/app/src/main/res/xml/start_preferences.xml +++ b/src/pandroid/app/src/main/res/xml/start_preferences.xml @@ -1,17 +1,26 @@ - + + app:title="@string/app_name" + app:enabled="false" + app:summary="1.0" + app:layout="@layout/preference_simple_about"/> + app:key="inputMap" + app:icon="@drawable/ic_key_a" + app:title="@string/controller_mapping" + app:summary="@string/pref_input_map_summary" + app:layout="@layout/preference_start_item"/> + + \ No newline at end of file