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 <chun.huang@student.manchester.ac.uk>
This commit is contained in:
gotoAndDie 2020-03-21 07:41:27 +00:00 committed by GitHub
parent 37cf260ba6
commit 04b8a718e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 69 additions and 2 deletions

View File

@ -125,6 +125,13 @@ public class VirtualController {
elements.clear(); 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) { public void addElement(VirtualControllerElement element, int x, int y, int width, int height) {
elements.add(element); elements.add(element);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(width, height); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(width, height);

View File

@ -324,6 +324,8 @@ public class VirtualControllerConfigurationLoader {
screenScale(TRIGGER_HEIGHT, height) screenScale(TRIGGER_HEIGHT, height)
); );
} }
controller.setOpacity(config.oscOpacity);
} }
public static void saveProfile(final VirtualController controller, public static void saveProfile(final VirtualController controller,

View File

@ -295,6 +295,15 @@ public abstract class VirtualControllerElement extends View {
invalidate(); 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) { protected final float getPercent(float value, float percent) {
return value / 100 * percent; return value / 100 * percent;
} }

View File

@ -19,6 +19,7 @@ public class PreferenceConfiguration {
private static final String DISABLE_TOASTS_PREF_STRING = "checkbox_disable_warnings"; 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 HOST_AUDIO_PREF_STRING = "checkbox_host_audio";
private static final String DEADZONE_PREF_STRING = "seekbar_deadzone"; 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 LANGUAGE_PREF_STRING = "list_languages";
private static final String LIST_MODE_PREF_STRING = "checkbox_list_mode"; private static final String LIST_MODE_PREF_STRING = "checkbox_list_mode";
private static final String SMALL_ICONS_PREF_STRING = "checkbox_small_icon_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_DISABLE_TOASTS = false;
private static final boolean DEFAULT_HOST_AUDIO = false; private static final boolean DEFAULT_HOST_AUDIO = false;
private static final int DEFAULT_DEADZONE = 15; private static final int DEFAULT_DEADZONE = 15;
private static final int DEFAULT_OPACITY = 90;
public static final String DEFAULT_LANGUAGE = "default"; public static final String DEFAULT_LANGUAGE = "default";
private static final boolean DEFAULT_LIST_MODE = false; private static final boolean DEFAULT_LIST_MODE = false;
private static final boolean DEFAULT_MULTI_CONTROLLER = true; private static final boolean DEFAULT_MULTI_CONTROLLER = true;
@ -73,6 +75,7 @@ public class PreferenceConfiguration {
public int bitrate; public int bitrate;
public int videoFormat; public int videoFormat;
public int deadzonePercentage; public int deadzonePercentage;
public int oscOpacity;
public boolean stretchVideo, enableSops, playHostAudio, disableWarnings; public boolean stretchVideo, enableSops, playHostAudio, disableWarnings;
public String language; public String language;
public boolean listMode, smallIconMode, multiController, enable51Surround, usbDriver; public boolean listMode, smallIconMode, multiController, enable51Surround, usbDriver;
@ -317,6 +320,8 @@ public class PreferenceConfiguration {
config.deadzonePercentage = prefs.getInt(DEADZONE_PREF_STRING, DEFAULT_DEADZONE); 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); config.language = prefs.getString(LANGUAGE_PREF_STRING, DEFAULT_LANGUAGE);
// Checkbox preferences // Checkbox preferences

View File

@ -5,6 +5,7 @@ import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.preference.DialogPreference; import android.preference.DialogPreference;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log;
import android.view.Gravity; import android.view.Gravity;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
@ -78,6 +79,8 @@ public class SeekBarPreference extends DialogPreference
valueText = new TextView(context); valueText = new TextView(context);
valueText.setGravity(Gravity.CENTER_HORIZONTAL); valueText.setGravity(Gravity.CENTER_HORIZONTAL);
valueText.setTextSize(32); 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( params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT); LinearLayout.LayoutParams.WRAP_CONTENT);

View File

@ -186,5 +186,7 @@
<string name="summary_enable_hdr">HDR-Streaming sofern dies von der PC GPU unterstützt wird. HDR erfordert eine GPU der GTX 1000 Serie oder neuer.</string> <string name="summary_enable_hdr">HDR-Streaming sofern dies von der PC GPU unterstützt wird. HDR erfordert eine GPU der GTX 1000 Serie oder neuer.</string>
<string name="title_enable_perf_overlay">Performance Overlay aktivieren</string> <string name="title_enable_perf_overlay">Performance Overlay aktivieren</string>
<string name="summary_enable_perf_overlay">Leistungsmerkmale während des Streamens in Echtzeit einblenden.</string> <string name="summary_enable_perf_overlay">Leistungsmerkmale während des Streamens in Echtzeit einblenden.</string>
<string name="suffix_osc_opacity">%</string>
<string name="dialog_title_osc_opacity">Transparenz</string>
</resources> </resources>

View File

@ -187,5 +187,6 @@
<string name="summary_enable_hdr">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.</string> <string name="summary_enable_hdr">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.</string>
<string name="title_enable_perf_overlay">Activer la superposition de performance</string> <string name="title_enable_perf_overlay">Activer la superposition de performance</string>
<string name="summary_enable_perf_overlay">Afficher une superposition à l\'écran avec des informations de performance en temps réel pendant la lecture en continu</string> <string name="summary_enable_perf_overlay">Afficher une superposition à l\'écran avec des informations de performance en temps réel pendant la lecture en continu</string>
<string name="suffix_osc_opacity">%</string>
</resources> </resources>

View File

@ -159,5 +159,6 @@
<string name="summary_video_format">H.265 riduce i requisiti di larghezza di banda video ma richiede un dispositivo molto recente</string> <string name="summary_video_format">H.265 riduce i requisiti di larghezza di banda video ma richiede un dispositivo molto recente</string>
<string name="title_enable_hdr">Abilita HDR (sperimentale)</string> <string name="title_enable_hdr">Abilita HDR (sperimentale)</string>
<string name="summary_enable_hdr">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.</string> <string name="summary_enable_hdr">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.</string>
<string name="suffix_osc_opacity">%</string>
</resources> </resources>

View File

@ -121,5 +121,18 @@
<string name="category_advanced_settings">高度な設定</string> <string name="category_advanced_settings">高度な設定</string>
<string name="title_video_format">H.265</string> <string name="title_video_format">H.265</string>
<string name="summary_video_format">H.265は動画に必要な帯域幅を圧縮します。この機能にはなるべく新しいデバイスが必要です</string> <string name="summary_video_format">H.265は動画に必要な帯域幅を圧縮します。この機能にはなるべく新しいデバイスが必要です</string>
<string name="suffix_osc_opacity">%</string>
<string name="dialog_title_osc_opacity">透過率</string>
<string name="title_osc_opacity">透過率</string>
<string name="summary_osc_opacity">オンスクリーンコントローラの透過率を調整します</string>
<string name="title_only_l3r3">L3 と R3 のみ表示します</string>
<string name="summary_only_l3r3">L3 と R3 以外のボタンを表示しない</string>
<string name="title_reset_osc">オンスクリーンコントローラをデフォルトに戻します</string>
<string name="summary_reset_osc">サイズやレイアウトを戻します</string>
<string name="dialog_title_reset_osc">デフォルトに戻します</string>
<string name="dialog_text_reset_osc">本当にデフォルトに戻しますか?</string>
<string name="toast_reset_osc_success">オンスクリーンコントローラをデフォルトに戻しました</string>
<string name="title_checkbox_vibrate_osc">振動</string>
<string name="summary_checkbox_vibrate_osc">コントローラの振動を真似します</string>
</resources> </resources>

View File

@ -136,5 +136,6 @@
<string name="category_advanced_settings">고급 설정</string> <string name="category_advanced_settings">고급 설정</string>
<string name="title_video_format">H.265 설정 변경</string> <string name="title_video_format">H.265 설정 변경</string>
<string name="summary_video_format">H.265는 비디오 대역폭 요구사항을 낮춰주지만 최신 장치가 필요합니다.</string> <string name="summary_video_format">H.265는 비디오 대역폭 요구사항을 낮춰주지만 최신 장치가 필요합니다.</string>
<string name="suffix_osc_opacity">%</string>
</resources> </resources>

View File

@ -125,5 +125,6 @@
<string name="category_advanced_settings">Geavanceerde Instellingen</string> <string name="category_advanced_settings">Geavanceerde Instellingen</string>
<string name="title_video_format">Verander H.265 instellingen</string> <string name="title_video_format">Verander H.265 instellingen</string>
<string name="summary_video_format">H.265 verlaagt video bandbreedte vereisten maar benodigdt een recent apparaat.</string> <string name="summary_video_format">H.265 verlaagt video bandbreedte vereisten maar benodigdt een recent apparaat.</string>
<string name="suffix_osc_opacity">%</string>
</resources> </resources>

View File

@ -183,4 +183,5 @@
<string name="summary_fps_list">Увеличение для более плавного видео потока. Уменьшите для лучшей производительности на более слабых устройствах.</string> <string name="summary_fps_list">Увеличение для более плавного видео потока. Уменьшите для лучшей производительности на более слабых устройствах.</string>
<string name="scut_invalid_uuid">Указанный PC недействителен</string> <string name="scut_invalid_uuid">Указанный PC недействителен</string>
<string name="scut_invalid_app_id">Указанное приложение недействительно</string> <string name="scut_invalid_app_id">Указанное приложение недействительно</string>
<string name="suffix_osc_opacity">%</string>
</resources> </resources>

View File

@ -205,6 +205,10 @@
<string name="title_enable_perf_overlay"> 启用性能信息 </string> <string name="title_enable_perf_overlay"> 启用性能信息 </string>
<string name="summary_enable_perf_overlay"> 在串流中显示实时性能信息 </string> <string name="summary_enable_perf_overlay"> 在串流中显示实时性能信息 </string>
<string name="title_osc_opacity">更改屏幕按钮透明度</string>
<string name="dialog_title_osc_opacity">透明度</string>
<string name="suffix_osc_opacity">%</string>
<string name="summary_osc_opacity">令屏幕按钮变得更透明/更不透明</string>
</resources> </resources>

View File

@ -205,6 +205,10 @@
<string name="title_enable_perf_overlay"> 啟用性能資訊 </string> <string name="title_enable_perf_overlay"> 啟用性能資訊 </string>
<string name="summary_enable_perf_overlay"> 在串流中顯示即時性能資訊 </string> <string name="summary_enable_perf_overlay"> 在串流中顯示即時性能資訊 </string>
<string name="title_osc_opacity">更改屏幕按鈕透明度</string>
<string name="dialog_title_osc_opacity">透明度</string>
<string name="suffix_osc_opacity">%</string>
<string name="summary_osc_opacity">令屏幕按钮變得更透明/更不透明</string>
</resources> </resources>

View File

@ -166,6 +166,10 @@
<string name="dialog_title_reset_osc">Reset Layout</string> <string name="dialog_title_reset_osc">Reset Layout</string>
<string name="dialog_text_reset_osc">Are you sure you want to delete your saved on-screen controls layout?</string> <string name="dialog_text_reset_osc">Are you sure you want to delete your saved on-screen controls layout?</string>
<string name="toast_reset_osc_success">On-screen controls reset to default</string> <string name="toast_reset_osc_success">On-screen controls reset to default</string>
<string name="title_osc_opacity">Change opacity of on-screen controls</string>
<string name="summary_osc_opacity">Make the on-screen controls more/less transparent</string>
<string name="dialog_title_osc_opacity">Change opacity</string>
<string name="suffix_osc_opacity">%</string>
<string name="category_ui_settings">UI Settings</string> <string name="category_ui_settings">UI Settings</string>
<string name="title_language_list">Language</string> <string name="title_language_list">Language</string>

View File

@ -107,6 +107,15 @@
android:key="checkbox_only_show_L3R3" android:key="checkbox_only_show_L3R3"
android:summary="@string/summary_only_l3r3" android:summary="@string/summary_only_l3r3"
android:title="@string/title_only_l3r3" /> android:title="@string/title_only_l3r3" />
<com.limelight.preferences.SeekBarPreference
android:key="seekbar_osc_opacity"
android:dialogMessage="@string/summary_osc_opacity"
seekbar:min="0"
seekbar:step="1"
android:max="100"
android:summary="@string/summary_osc_opacity"
android:text="@string/suffix_osc_opacity"
android:title="@string/dialog_title_osc_opacity" />
<com.limelight.preferences.ConfirmDeleteOscPreference <com.limelight.preferences.ConfirmDeleteOscPreference
android:title="@string/title_reset_osc" android:title="@string/title_reset_osc"
android:summary="@string/summary_reset_osc" android:summary="@string/summary_reset_osc"