mirror of
https://github.com/AngelAuraMC/Amethyst-Android.git
synced 2025-09-18 09:07:48 -04:00
[Custom controls] Add Toggelable option
This commit is contained in:
parent
b9cd11498e
commit
b0518d7b1a
@ -119,6 +119,9 @@ public class ActionPopupWindow extends PinnedPopupWindow implements OnClickListe
|
|||||||
final CheckBox checkHidden = dialog.findViewById(R.id.controlsetting_checkbox_hidden);
|
final CheckBox checkHidden = dialog.findViewById(R.id.controlsetting_checkbox_hidden);
|
||||||
checkHidden.setChecked(properties.hidden);
|
checkHidden.setChecked(properties.hidden);
|
||||||
|
|
||||||
|
final CheckBox checkToggle = dialog.findViewById(R.id.controlsetting_checkbox_toggle);
|
||||||
|
checkToggle.setChecked(properties.isToggle);
|
||||||
|
|
||||||
final LinearLayout layoutDynamicBtn = dialog.findViewById(R.id.controlsetting_dynamicbtnlayout);
|
final LinearLayout layoutDynamicBtn = dialog.findViewById(R.id.controlsetting_dynamicbtnlayout);
|
||||||
final CheckBox checkDynamicPos = dialog.findViewById(R.id.controlsetting_checkbox_dynamicpos);
|
final CheckBox checkDynamicPos = dialog.findViewById(R.id.controlsetting_checkbox_dynamicpos);
|
||||||
checkDynamicPos.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener(){
|
checkDynamicPos.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener(){
|
||||||
@ -194,6 +197,7 @@ public class ActionPopupWindow extends PinnedPopupWindow implements OnClickListe
|
|||||||
properties.name = editName.getText().toString();
|
properties.name = editName.getText().toString();
|
||||||
properties.hidden = checkHidden.isChecked();
|
properties.hidden = checkHidden.isChecked();
|
||||||
properties.isDynamicBtn = checkDynamicPos.isChecked();
|
properties.isDynamicBtn = checkDynamicPos.isChecked();
|
||||||
|
properties.isToggle = checkToggle.isChecked();
|
||||||
properties.dynamicX = editDynamicX.getText().toString();
|
properties.dynamicX = editDynamicX.getText().toString();
|
||||||
properties.dynamicY = editDynamicY.getText().toString();
|
properties.dynamicY = editDynamicY.getText().toString();
|
||||||
|
|
||||||
|
@ -1,16 +1,19 @@
|
|||||||
package net.kdt.pojavlaunch.customcontrols;
|
package net.kdt.pojavlaunch.customcontrols;
|
||||||
|
|
||||||
import android.content.*;
|
import android.content.*;
|
||||||
|
import android.graphics.*;
|
||||||
|
import android.util.*;
|
||||||
import android.view.*;
|
import android.view.*;
|
||||||
import android.view.View.*;
|
import android.view.View.*;
|
||||||
import android.widget.*;
|
import android.widget.*;
|
||||||
import net.kdt.pojavlaunch.*;
|
|
||||||
import com.kdt.handleview.*;
|
import com.kdt.handleview.*;
|
||||||
import android.view.ViewGroup.*;
|
import net.kdt.pojavlaunch.*;
|
||||||
import org.lwjgl.glfw.*;
|
import org.lwjgl.glfw.*;
|
||||||
|
|
||||||
public class ControlButton extends Button implements OnLongClickListener, OnTouchListener
|
public class ControlButton extends Button implements OnLongClickListener, OnTouchListener
|
||||||
{
|
{
|
||||||
|
private Paint mRectPaint;
|
||||||
|
|
||||||
private GestureDetector mGestureDetector;
|
private GestureDetector mGestureDetector;
|
||||||
private ControlData mProperties;
|
private ControlData mProperties;
|
||||||
private SelectionEndHandleView mHandleView;
|
private SelectionEndHandleView mHandleView;
|
||||||
@ -18,12 +21,18 @@ public class ControlButton extends Button implements OnLongClickListener, OnTouc
|
|||||||
private boolean mModifiable = false;
|
private boolean mModifiable = false;
|
||||||
private boolean mCanTriggerLongClick = true;
|
private boolean mCanTriggerLongClick = true;
|
||||||
|
|
||||||
|
private boolean mChecked = false;
|
||||||
|
|
||||||
|
private float mScaleAt;
|
||||||
private int mMods;
|
private int mMods;
|
||||||
|
|
||||||
public ControlButton(Context ctx, ControlData properties) {
|
public ControlButton(ControlLayout layout, ControlData properties) {
|
||||||
super(ctx);
|
super(layout.getContext());
|
||||||
|
setWillNotDraw(false);
|
||||||
|
|
||||||
mGestureDetector = new GestureDetector(ctx, new SingleTapConfirm());
|
mScaleAt = layout.mLayout.scaledAt;
|
||||||
|
|
||||||
|
mGestureDetector = new GestureDetector(getContext(), new SingleTapConfirm());
|
||||||
|
|
||||||
setBackgroundResource(R.drawable.control_button);
|
setBackgroundResource(R.drawable.control_button);
|
||||||
setOnLongClickListener(this);
|
setOnLongClickListener(this);
|
||||||
@ -33,6 +42,12 @@ public class ControlButton extends Button implements OnLongClickListener, OnTouc
|
|||||||
setModified(false);
|
setModified(false);
|
||||||
|
|
||||||
mHandleView = new SelectionEndHandleView(this);
|
mHandleView = new SelectionEndHandleView(this);
|
||||||
|
|
||||||
|
final TypedValue value = new TypedValue();
|
||||||
|
getContext().getTheme().resolveAttribute(R.attr.colorAccent, value, true);
|
||||||
|
|
||||||
|
mRectPaint = new Paint();
|
||||||
|
mRectPaint.setColor(value.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public HandleView getHandleView() {
|
public HandleView getHandleView() {
|
||||||
@ -121,6 +136,14 @@ public class ControlButton extends Button implements OnLongClickListener, OnTouc
|
|||||||
setProperties(mProperties);
|
setProperties(mProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDraw(Canvas canvas) {
|
||||||
|
super.onDraw(canvas);
|
||||||
|
if (mChecked) {
|
||||||
|
canvas.drawRect(0, getHeight() - 10 * mScaleAt, getWidth(), getHeight(), mRectPaint);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onLongClick(View p1) {
|
public boolean onLongClick(View p1) {
|
||||||
if (mCanTriggerLongClick && mModifiable) {
|
if (mCanTriggerLongClick && mModifiable) {
|
||||||
@ -144,25 +167,30 @@ public class ControlButton extends Button implements OnLongClickListener, OnTouc
|
|||||||
if (!mModifiable) {
|
if (!mModifiable) {
|
||||||
mCanTriggerLongClick = false;
|
mCanTriggerLongClick = false;
|
||||||
|
|
||||||
if (mProperties.keycode >= 0) {
|
if (!mProperties.isToggle) {
|
||||||
boolean isDown;
|
if (mProperties.keycode >= 0) {
|
||||||
switch (event.getActionMasked()) {
|
boolean isDown;
|
||||||
case MotionEvent.ACTION_DOWN: // 0
|
switch (event.getActionMasked()) {
|
||||||
case MotionEvent.ACTION_POINTER_DOWN: // 5
|
case MotionEvent.ACTION_DOWN: // 0
|
||||||
isDown = true;
|
case MotionEvent.ACTION_POINTER_DOWN: // 5
|
||||||
break;
|
isDown = true;
|
||||||
case MotionEvent.ACTION_UP: // 1
|
break;
|
||||||
case MotionEvent.ACTION_CANCEL: // 3
|
case MotionEvent.ACTION_UP: // 1
|
||||||
case MotionEvent.ACTION_POINTER_UP: // 6
|
case MotionEvent.ACTION_CANCEL: // 3
|
||||||
isDown = false;
|
case MotionEvent.ACTION_POINTER_UP: // 6
|
||||||
break;
|
isDown = false;
|
||||||
default:
|
break;
|
||||||
return false;
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
MainActivity.sendKeyPress(mProperties.keycode, mMods, isDown);
|
||||||
}
|
}
|
||||||
MainActivity.sendKeyPress(mProperties.keycode, mMods, isDown);
|
} else if (mGestureDetector.onTouchEvent(event)) {
|
||||||
|
mChecked = !mChecked;
|
||||||
return true;
|
MainActivity.sendKeyPress(mProperties.keycode, mMods, mChecked);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
} else {
|
} else {
|
||||||
if (mGestureDetector.onTouchEvent(event)) {
|
if (mGestureDetector.onTouchEvent(event)) {
|
||||||
mCanTriggerLongClick = true;
|
mCanTriggerLongClick = true;
|
||||||
|
@ -35,7 +35,7 @@ public class ControlData implements Cloneable
|
|||||||
* bigger device or vice versa.
|
* bigger device or vice versa.
|
||||||
*/
|
*/
|
||||||
public String dynamicX, dynamicY;
|
public String dynamicX, dynamicY;
|
||||||
public boolean isDynamicBtn;
|
public boolean isDynamicBtn, isToggle;
|
||||||
|
|
||||||
public static ControlData[] getSpecialButtons(){
|
public static ControlData[] getSpecialButtons(){
|
||||||
if (SPECIAL_BUTTONS == null) {
|
if (SPECIAL_BUTTONS == null) {
|
||||||
@ -100,12 +100,12 @@ public class ControlData implements Cloneable
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ControlData(String name, int keycode, float x, float y, float width, float height) {
|
public ControlData(String name, int keycode, float x, float y, float width, float height) {
|
||||||
this(name, keycode, Float.toString(x), Float.toString(y), width, height);
|
this(name, keycode, Float.toString(x), Float.toString(y), width, height, false);
|
||||||
this.isDynamicBtn = false;
|
this.isDynamicBtn = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ControlData(String name, int keycode, String dynamicX, String dynamicY) {
|
public ControlData(String name, int keycode, String dynamicX, String dynamicY) {
|
||||||
this(name, keycode, dynamicX, dynamicY, pixelOf50dp, pixelOf50dp);
|
this(name, keycode, dynamicX, dynamicY, pixelOf50dp, pixelOf50dp, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ControlData(android.content.Context ctx, int resId, int keycode, String dynamicX, String dynamicY, boolean isSquare) {
|
public ControlData(android.content.Context ctx, int resId, int keycode, String dynamicX, String dynamicY, boolean isSquare) {
|
||||||
@ -113,10 +113,10 @@ public class ControlData implements Cloneable
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ControlData(String name, int keycode, String dynamicX, String dynamicY, boolean isSquare) {
|
public ControlData(String name, int keycode, String dynamicX, String dynamicY, boolean isSquare) {
|
||||||
this(name, keycode, dynamicX, dynamicY, isSquare ? pixelOf50dp : pixelOf80dp, isSquare ? pixelOf50dp : pixelOf30dp);
|
this(name, keycode, dynamicX, dynamicY, isSquare ? pixelOf50dp : pixelOf80dp, isSquare ? pixelOf50dp : pixelOf30dp, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ControlData(String name, int keycode, String dynamicX, String dynamicY, float width, float height) {
|
public ControlData(String name, int keycode, String dynamicX, String dynamicY, float width, float height, boolean isToggle) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.keycode = keycode;
|
this.keycode = keycode;
|
||||||
this.dynamicX = dynamicX;
|
this.dynamicX = dynamicX;
|
||||||
@ -124,6 +124,7 @@ public class ControlData implements Cloneable
|
|||||||
this.width = width;
|
this.width = width;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
this.isDynamicBtn = true;
|
this.isDynamicBtn = true;
|
||||||
|
this.isToggle = isToggle;
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,7 +134,7 @@ public class ControlData implements Cloneable
|
|||||||
|
|
||||||
public ControlData clone() {
|
public ControlData clone() {
|
||||||
if (this instanceof ControlData) {
|
if (this instanceof ControlData) {
|
||||||
return new ControlData(name, keycode, ((ControlData) this).dynamicX, ((ControlData) this).dynamicY, width, height);
|
return new ControlData(name, keycode, ((ControlData) this).dynamicX, ((ControlData) this).dynamicY, width, height, isToggle);
|
||||||
} else {
|
} else {
|
||||||
return new ControlData(name, keycode, x, y, width, height);
|
return new ControlData(name, keycode, x, y, width, height);
|
||||||
}
|
}
|
||||||
|
@ -11,8 +11,8 @@ import org.lwjgl.glfw.*;
|
|||||||
|
|
||||||
public class ControlLayout extends FrameLayout
|
public class ControlLayout extends FrameLayout
|
||||||
{
|
{
|
||||||
|
protected CustomControls mLayout;
|
||||||
private boolean mModifiable;
|
private boolean mModifiable;
|
||||||
private CustomControls mLayout;
|
|
||||||
private CustomControlsActivity mActivity;
|
private CustomControlsActivity mActivity;
|
||||||
private boolean mControlVisible = false;
|
private boolean mControlVisible = false;
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ public class ControlLayout extends FrameLayout
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void addControlView(ControlData controlButton) {
|
private void addControlView(ControlData controlButton) {
|
||||||
final ControlButton view = new ControlButton(getContext(), controlButton);
|
final ControlButton view = new ControlButton(this, controlButton);
|
||||||
view.setModifiable(mModifiable);
|
view.setModifiable(mModifiable);
|
||||||
addView(view);
|
addView(view);
|
||||||
|
|
||||||
|
@ -42,6 +42,12 @@
|
|||||||
android:text="@string/customctrl_dynamicpos"
|
android:text="@string/customctrl_dynamicpos"
|
||||||
android:id="@+id/controlsetting_checkbox_dynamicpos"/>
|
android:id="@+id/controlsetting_checkbox_dynamicpos"/>
|
||||||
|
|
||||||
|
<CheckBox
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:text="@string/customctrl_toggle"
|
||||||
|
android:id="@+id/controlsetting_checkbox_toggle"/>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -190,6 +190,7 @@
|
|||||||
<string name="customctrl_keyname">Keycode</string>
|
<string name="customctrl_keyname">Keycode</string>
|
||||||
<string name="customctrl_specialkey">Special Key</string>
|
<string name="customctrl_specialkey">Special Key</string>
|
||||||
<string name="customctrl_hidden">Hidden</string>
|
<string name="customctrl_hidden">Hidden</string>
|
||||||
|
<string name="customctrl_toggle">Toggleable</string>
|
||||||
|
|
||||||
<string name="customctrl_dynamicpos">Dynamic position</string>
|
<string name="customctrl_dynamicpos">Dynamic position</string>
|
||||||
<string name="customctrl_dynamicpos_x">Dynamic X</string>
|
<string name="customctrl_dynamicpos_x">Dynamic X</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user