From 04b8a718e3fe728c14a291926b82b28d709c7855 Mon Sep 17 00:00:00 2001 From: gotoAndDie Date: Sat, 21 Mar 2020 07:41:27 +0000 Subject: [PATCH] Add opacity settings to on-screen controls (#798) * Restore resize controls, Make buttons oval * Create new default configuration * Split Configuration Mode into separate Move and Resize modes * Add transparency setting for on-screen buttons * Updated translations for on-screen controls Co-authored-by: Leo --- .../input/virtual_controller/VirtualController.java | 7 +++++++ .../VirtualControllerConfigurationLoader.java | 4 +++- .../VirtualControllerElement.java | 9 +++++++++ .../preferences/PreferenceConfiguration.java | 5 +++++ .../limelight/preferences/SeekBarPreference.java | 3 +++ app/src/main/res/values-de/strings.xml | 2 ++ app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values-it/strings.xml | 3 ++- app/src/main/res/values-ja/strings.xml | 13 +++++++++++++ app/src/main/res/values-ko/strings.xml | 1 + app/src/main/res/values-nl/strings.xml | 1 + app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values-zh-rCN/strings.xml | 4 ++++ app/src/main/res/values-zh-rTW/strings.xml | 4 ++++ app/src/main/res/values/strings.xml | 4 ++++ app/src/main/res/xml/preferences.xml | 9 +++++++++ 16 files changed, 69 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualController.java b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualController.java index 60dd3836..b193fe78 100644 --- a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualController.java +++ b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualController.java @@ -125,6 +125,13 @@ public class VirtualController { elements.clear(); } + public void setOpacity(int opacity) { + for (VirtualControllerElement element : elements) { + element.setOpacity(opacity); + } + } + + public void addElement(VirtualControllerElement element, int x, int y, int width, int height) { elements.add(element); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(width, height); diff --git a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerConfigurationLoader.java b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerConfigurationLoader.java index 7444e47c..5dd4b31e 100644 --- a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerConfigurationLoader.java +++ b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerConfigurationLoader.java @@ -324,6 +324,8 @@ public class VirtualControllerConfigurationLoader { screenScale(TRIGGER_HEIGHT, height) ); } + + controller.setOpacity(config.oscOpacity); } public static void saveProfile(final VirtualController controller, @@ -361,4 +363,4 @@ public class VirtualControllerConfigurationLoader { } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerElement.java b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerElement.java index f82fdc2d..5c92db20 100644 --- a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerElement.java +++ b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerElement.java @@ -295,6 +295,15 @@ public abstract class VirtualControllerElement extends View { invalidate(); } + + public void setOpacity(int opacity) { + int hexOpacity = opacity * 255 / 100; + this.normalColor = (hexOpacity << 24) | (normalColor & 0x00FFFFFF); + this.pressedColor = (hexOpacity << 24) | (pressedColor & 0x00FFFFFF); + + invalidate(); + } + protected final float getPercent(float value, float percent) { return value / 100 * percent; } diff --git a/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java b/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java index 36f93b80..87b645cd 100644 --- a/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java +++ b/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java @@ -19,6 +19,7 @@ public class PreferenceConfiguration { private static final String DISABLE_TOASTS_PREF_STRING = "checkbox_disable_warnings"; private static final String HOST_AUDIO_PREF_STRING = "checkbox_host_audio"; private static final String DEADZONE_PREF_STRING = "seekbar_deadzone"; + private static final String OSC_OPACITY_PREF_STRING = "seekbar_osc_opacity"; private static final String LANGUAGE_PREF_STRING = "list_languages"; private static final String LIST_MODE_PREF_STRING = "checkbox_list_mode"; private static final String SMALL_ICONS_PREF_STRING = "checkbox_small_icon_mode"; @@ -46,6 +47,7 @@ public class PreferenceConfiguration { private static final boolean DEFAULT_DISABLE_TOASTS = false; private static final boolean DEFAULT_HOST_AUDIO = false; private static final int DEFAULT_DEADZONE = 15; + private static final int DEFAULT_OPACITY = 90; public static final String DEFAULT_LANGUAGE = "default"; private static final boolean DEFAULT_LIST_MODE = false; private static final boolean DEFAULT_MULTI_CONTROLLER = true; @@ -73,6 +75,7 @@ public class PreferenceConfiguration { public int bitrate; public int videoFormat; public int deadzonePercentage; + public int oscOpacity; public boolean stretchVideo, enableSops, playHostAudio, disableWarnings; public String language; public boolean listMode, smallIconMode, multiController, enable51Surround, usbDriver; @@ -317,6 +320,8 @@ public class PreferenceConfiguration { config.deadzonePercentage = prefs.getInt(DEADZONE_PREF_STRING, DEFAULT_DEADZONE); + config.oscOpacity = prefs.getInt(OSC_OPACITY_PREF_STRING, DEFAULT_OPACITY); + config.language = prefs.getString(LANGUAGE_PREF_STRING, DEFAULT_LANGUAGE); // Checkbox preferences diff --git a/app/src/main/java/com/limelight/preferences/SeekBarPreference.java b/app/src/main/java/com/limelight/preferences/SeekBarPreference.java index 8c3a59a9..38a5af22 100644 --- a/app/src/main/java/com/limelight/preferences/SeekBarPreference.java +++ b/app/src/main/java/com/limelight/preferences/SeekBarPreference.java @@ -5,6 +5,7 @@ import android.content.Context; import android.os.Bundle; import android.preference.DialogPreference; import android.util.AttributeSet; +import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; @@ -78,6 +79,8 @@ public class SeekBarPreference extends DialogPreference valueText = new TextView(context); valueText.setGravity(Gravity.CENTER_HORIZONTAL); valueText.setTextSize(32); + // Default text for value; hides bug where OnSeekBarChangeListener isn't called when opacity is 0% + valueText.setText("0%"); params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 1a197ae4..b92fd985 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -186,5 +186,7 @@ HDR-Streaming sofern dies von der PC GPU unterstützt wird. HDR erfordert eine GPU der GTX 1000 Serie oder neuer. Performance Overlay aktivieren Leistungsmerkmale während des Streamens in Echtzeit einblenden. + % + Transparenz diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index dd1569cf..c6e76d98 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -187,5 +187,6 @@ Diffuser du HDR lorsque le jeu et le processeur graphique du PC le prennent en charge. HDR nécessite un GPU série GTX 1000 ou une version ultérieure. Activer la superposition de performance Afficher une superposition à l\'écran avec des informations de performance en temps réel pendant la lecture en continu + % diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index b8616f62..439a36fa 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -159,5 +159,6 @@ H.265 riduce i requisiti di larghezza di banda video ma richiede un dispositivo molto recente Abilita HDR (sperimentale) Utilizza l\'HDR quando il gioco e la scheda video del PC lo supportano. L\'HDR richiede una scheda video serie GTX 1000 o sucessive. - + % + diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index b6db0a84..b29120d8 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -121,5 +121,18 @@ 高度な設定 H.265 H.265は動画に必要な帯域幅を圧縮します。この機能にはなるべく新しいデバイスが必要です + % + 透過率 + 透過率 + オンスクリーンコントローラの透過率を調整します + L3 と R3 のみ表示します + L3 と R3 以外のボタンを表示しない + オンスクリーンコントローラをデフォルトに戻します + サイズやレイアウトを戻します + デフォルトに戻します + 本当にデフォルトに戻しますか? + オンスクリーンコントローラをデフォルトに戻しました + 振動 + コントローラの振動を真似します diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index e0d6dbf9..8a2fe366 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -136,5 +136,6 @@ 고급 설정 H.265 설정 변경 H.265는 비디오 대역폭 요구사항을 낮춰주지만 최신 장치가 필요합니다. + % diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index a14ce2c6..c348fa9a 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -125,5 +125,6 @@ Geavanceerde Instellingen Verander H.265 instellingen H.265 verlaagt video bandbreedte vereisten maar benodigdt een recent apparaat. + % diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 8ea7488c..cacd4b3d 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -183,4 +183,5 @@ Увеличение для более плавного видео потока. Уменьшите для лучшей производительности на более слабых устройствах. Указанный PC недействителен Указанное приложение недействительно + % diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 9f107d10..a19e2a04 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -205,6 +205,10 @@ 启用性能信息 在串流中显示实时性能信息 + 更改屏幕按钮透明度 + 透明度 + % + 令屏幕按钮变得更透明/更不透明 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 870118b1..f4e57d2a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -205,6 +205,10 @@ 啟用性能資訊 在串流中顯示即時性能資訊 + 更改屏幕按鈕透明度 + 透明度 + % + 令屏幕按钮變得更透明/更不透明 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c959c461..f921a29e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -166,6 +166,10 @@ Reset Layout Are you sure you want to delete your saved on-screen controls layout? On-screen controls reset to default + Change opacity of on-screen controls + Make the on-screen controls more/less transparent + Change opacity + % UI Settings Language diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index fbdbe7cc..cbef2c3d 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -107,6 +107,15 @@ android:key="checkbox_only_show_L3R3" android:summary="@string/summary_only_l3r3" android:title="@string/title_only_l3r3" /> +