From fa0971a3579cf816d45903ad4a95def2c72c8bb0 Mon Sep 17 00:00:00 2001 From: dcutullic Date: Thu, 30 Jan 2020 22:14:54 +0100 Subject: [PATCH 1/3] Correcting typo in AndroidManifest --- app/src/main/AndroidManifest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3f54d22..8127629 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,9 +14,9 @@ android:name=".MainActivity" android:windowSoftInputMode="adjustPan|adjustResize|stateAlwaysHidden|stateHidden"> - j + - k + From 202376265dbf6c4f35fca67783788a76ca80fee2 Mon Sep 17 00:00:00 2001 From: dcutullic Date: Thu, 30 Jan 2020 22:22:01 +0100 Subject: [PATCH 2/3] For the chooser fragment keep display of selected players even if any player release finger. Add a reset button to launch another choose session --- .../java/com/nicue/onetwo/MainActivity.java | 19 ++ .../nicue/onetwo/Utils/TouchDisplayView.java | 188 ++++++++++-------- .../onetwo/fragments/ChooserFragment.java | 3 + app/src/main/res/layout/toolbar.xml | 27 ++- app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 6 files changed, 148 insertions(+), 91 deletions(-) diff --git a/app/src/main/java/com/nicue/onetwo/MainActivity.java b/app/src/main/java/com/nicue/onetwo/MainActivity.java index e918b88..fb04043 100644 --- a/app/src/main/java/com/nicue/onetwo/MainActivity.java +++ b/app/src/main/java/com/nicue/onetwo/MainActivity.java @@ -33,6 +33,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe private Toolbar toolbar; private Switch mSwitch; private Button rollAllButton; + private Button resetButton; private Button addTimerButton; private Button delTimerButton; private TextView actionTitle; @@ -52,11 +53,13 @@ protected void onCreate(Bundle savedInstanceState) { // Set a Toolbar to replace the ActionBar. toolbar = (Toolbar) findViewById(R.id.toolbar); mSwitch = (Switch) toolbar.findViewById(R.id.toolbar_switch); + resetButton = (Button) toolbar.findViewById(R.id.reset_chosen_button); rollAllButton = (Button) toolbar.findViewById(R.id.roll_dices_button); addTimerButton = (Button) toolbar.findViewById(R.id.add_timer_button); delTimerButton = (Button) toolbar.findViewById(R.id.remove_timer_button); actionTitle = (TextView) toolbar.findViewById(R.id.custom_toolbar_title); mSwitch.setOnCheckedChangeListener(this); + resetButton.setOnClickListener(this); rollAllButton.setOnClickListener(this); addTimerButton.setOnClickListener(this); delTimerButton.setOnClickListener(this); @@ -98,6 +101,7 @@ protected void onCreate(Bundle savedInstanceState) { }else if (tempFragment instanceof ChooserFragment){ currentTitleString = getString(R.string.menu_chooser); + resetButton.setVisibility(View.VISIBLE); mSwitch.setVisibility(View.VISIBLE); }else if (tempFragment instanceof TimerFragment){ @@ -153,6 +157,10 @@ public void onClick(View v) { case R.id.remove_timer_button: delTimer(); break; + case R.id.reset_chosen_button: + resetChooser(); + break; + } } @@ -179,6 +187,7 @@ public void selectDrawerItem(MenuItem menuItem) { case R.id.nav_first_fragment: fragmentClass = CounterFragment.class; mSwitch.setVisibility(View.INVISIBLE); + resetButton.setVisibility(View.INVISIBLE); rollAllButton.setVisibility(View.INVISIBLE); delTimerButton.setVisibility(View.INVISIBLE); addTimerButton.setVisibility(View.INVISIBLE); @@ -186,6 +195,7 @@ public void selectDrawerItem(MenuItem menuItem) { case R.id.nav_second_fragment: fragmentClass = DiceFragment.class; mSwitch.setVisibility(View.INVISIBLE); + resetButton.setVisibility(View.INVISIBLE); rollAllButton.setVisibility(View.VISIBLE); delTimerButton.setVisibility(View.INVISIBLE); addTimerButton.setVisibility(View.INVISIBLE); @@ -193,6 +203,7 @@ public void selectDrawerItem(MenuItem menuItem) { case R.id.nav_third_fragment: fragmentClass = ChooserFragment.class; mSwitch.setVisibility(View.VISIBLE); + resetButton.setVisibility(View.VISIBLE); rollAllButton.setVisibility(View.INVISIBLE); delTimerButton.setVisibility(View.INVISIBLE); addTimerButton.setVisibility(View.INVISIBLE); @@ -201,6 +212,7 @@ public void selectDrawerItem(MenuItem menuItem) { case R.id.nav_fourth_fragment: fragmentClass = TimerFragment.class; mSwitch.setVisibility(View.INVISIBLE); + resetButton.setVisibility(View.INVISIBLE); rollAllButton.setVisibility(View.INVISIBLE); delTimerButton.setVisibility(View.VISIBLE); addTimerButton.setVisibility(View.VISIBLE); @@ -271,6 +283,13 @@ public void delTimer(){ } } + public void resetChooser(){ + Fragment tempFragment = getSupportFragmentManager().findFragmentById(R.id.m_content); + + if (tempFragment instanceof ChooserFragment){ + ((ChooserFragment) tempFragment).resetChooser(); + } + } public void loadTimersData(){ Fragment tempFragment2 = getSupportFragmentManager().findFragmentById(R.id.m_content); diff --git a/app/src/main/java/com/nicue/onetwo/Utils/TouchDisplayView.java b/app/src/main/java/com/nicue/onetwo/Utils/TouchDisplayView.java index f576ee7..24801ce 100644 --- a/app/src/main/java/com/nicue/onetwo/Utils/TouchDisplayView.java +++ b/app/src/main/java/com/nicue/onetwo/Utils/TouchDisplayView.java @@ -95,6 +95,20 @@ private static void shuffleArray(int[] array) // Is there an active touch? private boolean mHasTouch = false; + public void reset() { + fingersDown = false; + alreadyChosen = false; + chosenColor = 0; + chosenId = -1; + randomArray = new int[0]; + // SparseArray for touch events, indexed by touch id + mTouches = new SparseArray(10); + + initialisePaint(); + // trigger redraw on UI thread + this.postInvalidate(); + } + /** * Holds data related to a touch pointer, * object pool using {} and recycle to reuse @@ -154,114 +168,124 @@ public TouchDisplayView(Context context, AttributeSet attrs) { @Override public boolean onTouchEvent(MotionEvent event) { - final int action = event.getAction(); + if(!alreadyChosen) { // Do not delete display if chosen done + final int action = event.getAction(); - switch (action & MotionEvent.ACTION_MASK) { + switch (action & MotionEvent.ACTION_MASK) { - case MotionEvent.ACTION_DOWN: { - //fingers = 1; - // first pressed gesture has started + case MotionEvent.ACTION_DOWN: { - int id = event.getPointerId(0); + // TODO remove + //fingersDown = true; - TouchHistory data = TouchHistory.obtain(event.getX(0), event.getY(0), - event.getPressure(0)); + //fingers = 1; + // first pressed gesture has started - //Store the data under its pointer identifier. The pointer number stays consistent - mTouches.put(id, data); + int id = event.getPointerId(0); - Vibrator v = (Vibrator) getContext().getSystemService(Context.VIBRATOR_SERVICE); - v.vibrate(20); + TouchHistory data = TouchHistory.obtain(event.getX(0), event.getY(0), + event.getPressure(0)); - mHasTouch = true; + //Store the data under its pointer identifier. The pointer number stays consistent + mTouches.put(id, data); - break; - } + Vibrator v = (Vibrator) getContext().getSystemService(Context.VIBRATOR_SERVICE); + v.vibrate(20); - case MotionEvent.ACTION_POINTER_DOWN: { + mHasTouch = true; - fingersDown = true; - //fingers ++ ; + // TODO remove + //handler.postDelayed(runnable, 1500); - /* - * A non-primary pointer has gone down, after an event for the - * primary pointer (ACTION_DOWN) has already been received. - */ - int index = event.getActionIndex(); - int id = event.getPointerId(index); + break; + } - TouchHistory data = TouchHistory.obtain(event.getX(index), event.getY(index), - event.getPressure(index)); - //data.label = "id: " + id; + case MotionEvent.ACTION_POINTER_DOWN: { - Vibrator v = (Vibrator) getContext().getSystemService(Context.VIBRATOR_SERVICE); - v.vibrate(20); - - /* - * Store the data under its pointer identifier. The index of - * this pointer can change over multiple events, but this - * pointer is always identified by the same identifier for this - * active gesture. - */ - mTouches.put(id, data); - handler.postDelayed(runnable, 1500); - - break; - } + fingersDown = true; + //fingers ++ ; + + /* + * A non-primary pointer has gone down, after an event for the + * primary pointer (ACTION_DOWN) has already been received. + */ + int index = event.getActionIndex(); + int id = event.getPointerId(index); - case MotionEvent.ACTION_UP: { - //fingers = 0; - /* - * Final pointer has gone up and has ended the last pressed - * gesture. - */ + TouchHistory data = TouchHistory.obtain(event.getX(index), event.getY(index), + event.getPressure(index)); + //data.label = "id: " + id; - int id = event.getPointerId(0); - TouchHistory data = mTouches.get(id); - mTouches.remove(id); - data.recycle(); + Vibrator v = (Vibrator) getContext().getSystemService(Context.VIBRATOR_SERVICE); + v.vibrate(20); - mHasTouch = false; + /* + * Store the data under its pointer identifier. The index of + * this pointer can change over multiple events, but this + * pointer is always identified by the same identifier for this + * active gesture. + */ + mTouches.put(id, data); + handler.postDelayed(runnable, 1500); - break; - } + break; + } - case MotionEvent.ACTION_POINTER_UP: { - fingersDown = false; - alreadyChosen = false; - randomArray = new int[0]; - //fingers --; - handler.removeCallbacks(runnable); - /* - * A non-primary pointer has gone up and other pointers are - * still active. - */ - - int index = event.getActionIndex(); - int id = event.getPointerId(index); - - TouchHistory data = mTouches.get(id); - mTouches.remove(id); - data.recycle(); - - break; - } + case MotionEvent.ACTION_UP: { + //fingers = 0; + /* + * Final pointer has gone up and has ended the last pressed + * gesture. + */ - case MotionEvent.ACTION_MOVE: { + int id = event.getPointerId(0); + TouchHistory data = mTouches.get(id); + mTouches.remove(id); + data.recycle(); + + mHasTouch = false; + handler.removeCallbacks(runnable); + + break; + } - for (int index = 0; index < event.getPointerCount(); index++) { - // get pointer id for data stored at this index + case MotionEvent.ACTION_POINTER_UP: { + fingersDown = false; + alreadyChosen = false; + randomArray = new int[0]; + //fingers --; + handler.removeCallbacks(runnable); + /* + * A non-primary pointer has gone up and other pointers are + * still active. + */ + + int index = event.getActionIndex(); int id = event.getPointerId(index); - // get the data stored externally about this pointer. TouchHistory data = mTouches.get(id); + mTouches.remove(id); + data.recycle(); - //add new values - data.setTouch(event.getX(index), event.getY(index), - event.getPressure(index)); + break; + } + + case MotionEvent.ACTION_MOVE: { + + for (int index = 0; index < event.getPointerCount(); index++) { + // get pointer id for data stored at this index + int id = event.getPointerId(index); + + // get the data stored externally about this pointer. + TouchHistory data = mTouches.get(id); + + //add new values + data.setTouch(event.getX(index), event.getY(index), + event.getPressure(index)); + } + break; } - break; } } diff --git a/app/src/main/java/com/nicue/onetwo/fragments/ChooserFragment.java b/app/src/main/java/com/nicue/onetwo/fragments/ChooserFragment.java index 7c53dd2..4d2a6b3 100644 --- a/app/src/main/java/com/nicue/onetwo/fragments/ChooserFragment.java +++ b/app/src/main/java/com/nicue/onetwo/fragments/ChooserFragment.java @@ -24,4 +24,7 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, public void setChoosingOrder(boolean b){ mView.setChoosingOrder(b); } + public void resetChooser(){ + mView.reset(); + } } diff --git a/app/src/main/res/layout/toolbar.xml b/app/src/main/res/layout/toolbar.xml index 5feda92..f0f6822 100644 --- a/app/src/main/res/layout/toolbar.xml +++ b/app/src/main/res/layout/toolbar.xml @@ -50,14 +50,23 @@ android:text="@string/roll_all" android:visibility="invisible" /> - +