1
0
Fork 0

horizontal aligning by dragging the config button

This commit is contained in:
sspanak 2024-06-28 12:56:11 +03:00 committed by Dimo Karaivanov
parent 44a0ca0f4c
commit 66b9b278a8
6 changed files with 52 additions and 13 deletions

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:tools="http://schemas.android.com/tools"
android:versionCode="583"
android:versionName="34.10"
android:versionCode="588"
android:versionName="34.15"
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <!-- allows displaying notifications on Android >= 13 -->

View file

@ -41,7 +41,7 @@ public class ItemNumpadAlignment extends ItemDropDown {
options.put(Gravity.END, context.getString(R.string.virtual_numpad_alignment_right));
super.populateIntegers(options);
super.setValue(settings.getNumpadKeyAlignment() + "");
super.setValue(settings.getNumpadAlignment() + "");
onLayoutChange(settings.getMainViewLayout());
return this;

View file

@ -39,10 +39,19 @@ public class SettingsUI extends SettingsTyping {
return prefs.getBoolean("pref_haptic_feedback", true);
}
public int getNumpadKeyAlignment() {
public int getNumpadAlignment() {
return getStringifiedInt("pref_numpad_alignment", Gravity.CENTER_HORIZONTAL);
}
public void setNumpadAlignment(int alignment) {
if (alignment != Gravity.CENTER_HORIZONTAL && alignment != Gravity.START && alignment != Gravity.END) {
Logger.w(getClass().getSimpleName(), "Ignoring invalid numpad key alignment: " + alignment);
}
prefsEditor.putString("pref_numpad_alignment", Integer.toString(alignment));
prefsEditor.apply();
}
public int getNumpadKeyDefaultHeight() {
return context.getResources().getDimensionPixelSize(R.dimen.numpad_key_height);
}

View file

@ -2,7 +2,6 @@ package io.github.sspanak.tt9.ui.main;
import android.content.res.Resources;
import android.os.Build;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
@ -34,7 +33,7 @@ class MainLayoutNumpad extends BaseMainLayout {
LinearLayout container = view.findViewById(R.id.numpad_container);
if (container != null) {
container.setGravity(tt9.getSettings().getNumpadKeyAlignment());
container.setGravity(tt9.getSettings().getNumpadAlignment());
}
}

View file

@ -1,5 +1,6 @@
package io.github.sspanak.tt9.ui.main;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
@ -84,6 +85,24 @@ public class ResizableMainView extends MainView implements View.OnAttachStateCha
}
public void onAlign(float deltaX) {
boolean right = deltaX > 0;
SettingsStore settings = tt9.getSettings();
if (settings.getNumpadAlignment() == Gravity.START && right) {
settings.setNumpadAlignment(Gravity.CENTER_HORIZONTAL);
} else if (settings.getNumpadAlignment() == Gravity.END && !right) {
settings.setNumpadAlignment(Gravity.CENTER_HORIZONTAL);
} else if (settings.getNumpadAlignment() == Gravity.CENTER_HORIZONTAL && right) {
settings.setNumpadAlignment(Gravity.END);
} else if (settings.getNumpadAlignment() == Gravity.CENTER_HORIZONTAL && !right) {
settings.setNumpadAlignment(Gravity.START);
}
render();
}
public void onResizeStart(float startY) {
resizeStartY = startY;
}

View file

@ -13,12 +13,17 @@ public class ResizeHandle implements View.OnTouchListener {
@NonNull private final Runnable onClick;
private ResizableMainView mainView;
private final float ALIGN_THRESHOLD;
private final float RESIZE_THRESHOLD;
private boolean dragging;
private boolean aligning;
private boolean resizing;
private float startX;
private float startY;
ResizeHandle(@NonNull Context context, @NonNull Runnable onClick) {
ALIGN_THRESHOLD = context.getResources().getDimensionPixelSize(R.dimen.numpad_key_height) * 0.75f;
RESIZE_THRESHOLD = context.getResources().getDimensionPixelSize(R.dimen.numpad_key_height) / 4.0f;
this.onClick = onClick;
}
@ -45,27 +50,34 @@ public class ResizeHandle implements View.OnTouchListener {
}
private void handlePress(MotionEvent event) {
startX = event.getRawX();
startY = event.getRawY();
}
private void handleDrag(MotionEvent event) {
if (mainView == null) {
dragging = false;
aligning = false;
resizing = false;
return;
}
if (!dragging && Math.abs(event.getRawY() - startY) >= RESIZE_THRESHOLD) {
if (!resizing && Math.abs(event.getRawY() - startY) >= RESIZE_THRESHOLD) {
mainView.onResizeStart(event.getRawY());
dragging = true;
} else if (dragging) {
resizing = true;
} else if (resizing) {
mainView.onResizeThrottled(event.getRawY());
} else if (!aligning && Math.abs(event.getRawX() - startX) >= ALIGN_THRESHOLD) {
mainView.onAlign(event.getRawX() - startX);
aligning = true;
}
}
private void handleRelease(MotionEvent event) {
if (mainView != null && dragging) {
if (mainView != null && resizing) {
mainView.onResize(event.getRawY());
dragging = false;
resizing = false;
} else if (mainView != null && aligning) {
aligning = false;
} else {
onClick.run();
}