From e39e0910a17c819fe0c3d265c81355afea56bcfa Mon Sep 17 00:00:00 2001 From: Karim Mreisi Date: Thu, 22 Jan 2015 08:59:55 +0100 Subject: [PATCH] add virtual controller configuration screen --- app/src/main/AndroidManifest.xml | 6 + app/src/main/java/com/limelight/AppView.java | 5 +- .../virtual_controller/VirtualController.java | 160 +++++++++++++----- .../VirtualControllerConfiguration.java | 47 +++++ .../limelight/preferences/StreamSettings.java | 16 ++ .../activity_configure_virtual_controller.xml | 8 + app/src/main/res/xml/preferences.xml | 10 ++ 7 files changed, 206 insertions(+), 46 deletions(-) create mode 100644 app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerConfiguration.java create mode 100644 app/src/main/res/layout/activity_configure_virtual_controller.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2d7c93de..f0221cf3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,6 +70,12 @@ android:name="android.support.PARENT_ACTIVITY" android:value="com.limelight.Connection" /> + + diff --git a/app/src/main/java/com/limelight/AppView.java b/app/src/main/java/com/limelight/AppView.java index f73436e0..d075afbc 100644 --- a/app/src/main/java/com/limelight/AppView.java +++ b/app/src/main/java/com/limelight/AppView.java @@ -20,6 +20,7 @@ import com.limelight.utils.UiHelper; import android.app.Activity; import android.content.Intent; import android.os.Bundle; +import android.preference.Preference; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuItem; @@ -54,8 +55,8 @@ public class AppView extends Activity { setContentView(R.layout.activity_app_view); UiHelper.notifyNewRootView(this); - - byte[] address = getIntent().getByteArrayExtra(ADDRESS_EXTRA); + + byte[] address = getIntent().getByteArrayExtra(ADDRESS_EXTRA); uniqueId = getIntent().getStringExtra(UNIQUEID_EXTRA); remote = getIntent().getBooleanExtra(REMOTE_EXTRA, false); if (address == null || uniqueId == null) { 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 08057566..a1e403b4 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 @@ -20,7 +20,7 @@ import com.limelight.nvstream.input.ControllerPacket; */ public class VirtualController { - private static final boolean _PRINT_DEBUG_INFORMATION = false; + private static final boolean _PRINT_DEBUG_INFORMATION = true; private static final void _DBG(String text) { @@ -30,25 +30,25 @@ public class VirtualController } } private short inputMap = 0x0000; - private byte leftTrigger = 0x00; - private byte rightTrigger = 0x00; - private short rightStickX = 0x0000; - private short rightStickY = 0x0000; + private byte leftTrigger = 0x00; + private byte rightTrigger = 0x00; + private short rightStickX = 0x0000; + private short rightStickY = 0x0000; private short leftStickX = 0x0000; private short leftStickY = 0x0000; private FrameLayout frame_layout = null; - private RelativeLayout relative_layout = null; + private RelativeLayout relative_layout = null; private RelativeLayout.LayoutParams layoutParamsButtonDPadLeft = null; private RelativeLayout.LayoutParams layoutParamsButtonDPadRight = null; private RelativeLayout.LayoutParams layoutParamsButtonDPadUp = null; private RelativeLayout.LayoutParams layoutParamsButtonDPadDown = null; - private RelativeLayout.LayoutParams layoutParamsButtonA = null; - private RelativeLayout.LayoutParams layoutParamsButtonB = null; - private RelativeLayout.LayoutParams layoutParamsButtonX = null; - private RelativeLayout.LayoutParams layoutParamsButtonY = null; + private RelativeLayout.LayoutParams layoutParamsButtonA = null; + private RelativeLayout.LayoutParams layoutParamsButtonB = null; + private RelativeLayout.LayoutParams layoutParamsButtonX = null; + private RelativeLayout.LayoutParams layoutParamsButtonY = null; private RelativeLayout.LayoutParams layoutParamsButtonR1 = null; private RelativeLayout.LayoutParams layoutParamsButtonR2 = null; @@ -56,13 +56,13 @@ public class VirtualController private RelativeLayout.LayoutParams layoutParamsParamsStick2 = null; private Button buttonStart = null; - private Button buttonSelect = null; + private Button buttonSelect = null; private Button buttonESC = null; - private Button buttonDPadLeft = null; - private Button buttonDPadRight = null; - private Button buttonDPadUp = null; - private Button buttonDPadDown = null; + private Button buttonDPadLeft = null; + private Button buttonDPadRight = null; + private Button buttonDPadUp = null; + private Button buttonDPadDown = null; private Button buttonA = null; private Button buttonB = null; @@ -71,9 +71,11 @@ public class VirtualController private Button buttonR1 = null; private Button buttonR2 = null; - private AnalogStick stick = null; + private AnalogStick stick = null; private AnalogStick stick2 = null; + private boolean configuration = false; + NvConnection connection = null; private int getPercentageV(int percent) @@ -141,21 +143,21 @@ public class VirtualController layoutParamsButtonB = new RelativeLayout.LayoutParams(getPercentageV(10), getPercentageV(10)); layoutParamsButtonX = new RelativeLayout.LayoutParams(getPercentageV(10), getPercentageV(10)); layoutParamsButtonY = new RelativeLayout.LayoutParams(getPercentageV(10), getPercentageV(10)); - layoutParamsButtonR1 = new RelativeLayout.LayoutParams(getPercentageV(10), getPercentageV(10)); - layoutParamsButtonR2 = new RelativeLayout.LayoutParams(getPercentageV(10), getPercentageV(10)); + layoutParamsButtonR1 = new RelativeLayout.LayoutParams(getPercentageV(10), getPercentageV(10)); + layoutParamsButtonR2 = new RelativeLayout.LayoutParams(getPercentageV(10), getPercentageV(10)); - setPercentilePosition(layoutParamsButtonDPadLeft, 5, 45); - setPercentilePosition(layoutParamsButtonDPadRight, 15, 45); - setPercentilePosition(layoutParamsButtonDPadUp, 10, 35); - setPercentilePosition(layoutParamsButtonDPadDown, 10, 55); + setPercentilePosition(layoutParamsButtonDPadLeft, 5, 45); + setPercentilePosition(layoutParamsButtonDPadRight, 15, 45); + setPercentilePosition(layoutParamsButtonDPadUp, 10, 35); + setPercentilePosition(layoutParamsButtonDPadDown, 10, 55); - setPercentilePosition(layoutParamsParamsStick, 22, 78); - setPercentilePosition(layoutParamsParamsStick2, 78, 78); + setPercentilePosition(layoutParamsParamsStick, 22, 78); + setPercentilePosition(layoutParamsParamsStick2, 78, 78); - setPercentilePosition(layoutParamsButtonA, 85, 52); - setPercentilePosition(layoutParamsButtonB, 92, 47); - setPercentilePosition(layoutParamsButtonX, 85, 40); - setPercentilePosition(layoutParamsButtonY, 92, 35); + setPercentilePosition(layoutParamsButtonA, 85, 52); + setPercentilePosition(layoutParamsButtonB, 92, 47); + setPercentilePosition(layoutParamsButtonX, 85, 40); + setPercentilePosition(layoutParamsButtonY, 92, 35); setPercentilePosition(layoutParamsButtonR1, 95, 68); setPercentilePosition(layoutParamsButtonR2, 95, 80); @@ -404,24 +406,94 @@ public class VirtualController refreshLayout(); } + public VirtualController(FrameLayout layout, Context context, WindowManager window_manager) + { + this.connection = null; + frame_layout = layout; + + relative_layout = new RelativeLayout(context); + + relative_layout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() + { + @Override + public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) + { + refreshLayout(); + } + }); + + frame_layout.addView(relative_layout); + + buttonDPadLeft = new Button(context); + buttonDPadLeft.setText("LF"); + + buttonDPadRight = new Button(context); + buttonDPadRight.setText("RI"); + + buttonDPadUp = new Button(context); + buttonDPadUp.setText("UP"); + + buttonDPadDown = new Button(context); + buttonDPadDown.setText("DW"); + + buttonX = new Button(context); + buttonX.setText("X"); + + buttonY = new Button(context); + buttonY.setText("Y"); + + buttonA = new Button(context); + buttonA.setText("A"); + + buttonB = new Button(context); + buttonB.setText("B"); + + buttonR1 = new Button(context); + buttonR1.setText("LT"); + + buttonR2 = new Button(context); + buttonR2.setText("RT"); + + stick = new AnalogStick(context); + stick2 = new AnalogStick(context); + + configuration = true; + + + // receive touch events + frame_layout.setOnTouchListener(new View.OnTouchListener() + { + @Override + public boolean onTouch(View v, MotionEvent event) + { + _DBG("touch event"); + return true; + } + }); + + + refreshLayout(); + } + private void sendControllerInputPacket() { - try - { - _DBG("INPUT_MAP + " + inputMap); - _DBG("LEFT_TRIGGER " + leftTrigger); - _DBG("RIGHT_TRIGGER " + rightTrigger); - _DBG("LEFT STICK X: " + leftStickX + " Y: " + leftStickY); - _DBG("RIGHT STICK X: " + rightStickX + " Y: " + rightStickY); - _DBG("RIGHT STICK X: " + rightStickX + " Y: " + rightStickY); + try { + _DBG("INPUT_MAP + " + inputMap); + _DBG("LEFT_TRIGGER " + leftTrigger); + _DBG("RIGHT_TRIGGER " + rightTrigger); + _DBG("LEFT STICK X: " + leftStickX + " Y: " + leftStickY); + _DBG("RIGHT STICK X: " + rightStickX + " Y: " + rightStickY); + _DBG("RIGHT STICK X: " + rightStickX + " Y: " + rightStickY); - - connection.sendControllerInput(inputMap, leftTrigger, rightTrigger, - leftStickX, leftStickY, rightStickX, rightStickY); - } - catch (Exception e) - { - e.printStackTrace(); - } + if (connection != null) + { + connection.sendControllerInput(inputMap, leftTrigger, rightTrigger, + leftStickX, leftStickY, rightStickX, rightStickY); + } + } + catch (Exception e) + { + e.printStackTrace(); + } } } diff --git a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerConfiguration.java b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerConfiguration.java new file mode 100644 index 00000000..01c73f66 --- /dev/null +++ b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerConfiguration.java @@ -0,0 +1,47 @@ +package com.limelight.binding.input.virtual_controller; + +import android.app.Activity; +import android.os.Bundle; +import android.os.PersistableBundle; +import android.view.Window; +import android.view.WindowManager; +import android.widget.FrameLayout; +import android.widget.Toast; + +import com.limelight.R; + +/** + * Created by Karim Mreisi on 22.01.2015. + */ +public class VirtualControllerConfiguration extends Activity +{ + VirtualController virtualController; + + @Override + protected void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + + // We don't want a title bar + requestWindowFeature(Window.FEATURE_NO_TITLE); + + // Full-screen and don't let the display go off + getWindow().addFlags( + WindowManager.LayoutParams.FLAG_FULLSCREEN | + WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + + // Inflate the content + setContentView(R.layout.activity_configure_virtual_controller); + + FrameLayout frameLayout = (FrameLayout) findViewById(R.id.configure_virtual_controller_frameLayout); + + // start with configuration constructor + virtualController = new VirtualController(frameLayout, getApplicationContext(), getWindowManager()); + + Toast toast = new Toast(this); + toast.setText("Not implemented yet!"); + toast.setDuration(Toast.LENGTH_SHORT); + + toast.show(); + } +} diff --git a/app/src/main/java/com/limelight/preferences/StreamSettings.java b/app/src/main/java/com/limelight/preferences/StreamSettings.java index bf7243f2..5b9e361f 100644 --- a/app/src/main/java/com/limelight/preferences/StreamSettings.java +++ b/app/src/main/java/com/limelight/preferences/StreamSettings.java @@ -1,5 +1,6 @@ package com.limelight.preferences; +import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.app.Activity; @@ -8,6 +9,8 @@ import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import com.limelight.R; +import com.limelight.binding.input.virtual_controller.VirtualController; +import com.limelight.binding.input.virtual_controller.VirtualControllerConfiguration; import com.limelight.utils.UiHelper; public class StreamSettings extends Activity { @@ -49,6 +52,19 @@ public class StreamSettings extends Activity { return true; } }); + + Preference siteVirtualControllerButton = (Preference)findPreference("button_open_virtual_controller_configuration"); + siteVirtualControllerButton.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() + { + @Override + public boolean onPreferenceClick(Preference arg0) + { + Intent virtualControllerConfiguration = new Intent(getActivity(), VirtualControllerConfiguration.class); + startActivity(virtualControllerConfiguration); + + return true; + } + }); } } } diff --git a/app/src/main/res/layout/activity_configure_virtual_controller.xml b/app/src/main/res/layout/activity_configure_virtual_controller.xml new file mode 100644 index 00000000..5c68e34b --- /dev/null +++ b/app/src/main/res/layout/activity_configure_virtual_controller.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index ce2c037a..d5c608e9 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -55,5 +55,15 @@ android:summary="@string/summary_decoder_list" android:defaultValue="auto" /> + + + + \ No newline at end of file