Skip to content

Commit

Permalink
Added option to delay handling onclick events in activities (see #106)
Browse files Browse the repository at this point in the history
  • Loading branch information
tasota committed Jan 21, 2020
1 parent 10bfa06 commit 0879983
Show file tree
Hide file tree
Showing 18 changed files with 193 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,31 @@
*/
public abstract class AbstractActivity extends AppCompatActivity {

private final DelayedOnClickHandler delayedOnClickHandler = new DelayedOnClickHandler(this);


/**
* An activity by default will delay setting onclick listeners for its views.
*
* @return false if onclick listeners should be immediately set when the activity resumes.
*/
public boolean activityUsesDelayedOnClickHandler() {
return true;
}


/**
* Determines if views in the activity should respond to onclick events. This depends on the state of the DelayedOnClickHandler.
*
* @return true if onclick events should be handled, false otherwise.
*/
public final boolean activityShouldHandleOnClickEvents() {
if (activityUsesDelayedOnClickHandler()) {
return delayedOnClickHandler.delayIsFinished();
}
return true;
}


/**
* Hide navigation buttons to make the activity take up the entire screen.
Expand All @@ -28,6 +53,10 @@ protected void onResume() {
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

decorView.setSystemUiVisibility(uiOptions);

if (activityUsesDelayedOnClickHandler()) {
delayedOnClickHandler.onResumeActivity();
}
}


Expand All @@ -42,7 +71,12 @@ protected void onCreate(Bundle savedInstanceState) {
@Override
protected void onPause() {
Log.i(Constants.LOG_TAG, "onPause");

AudioPlayer.getInstance(getApplicationContext()).stop();
if (activityUsesDelayedOnClickHandler()) {
delayedOnClickHandler.onPauseActivity();
}

super.onPause();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package org.cmucreatelab.android.flutterprek.activities;

import org.cmucreatelab.android.flutterprek.BackgroundTimer;

/**
* Handles timer for setting the onclick listeners for an activity.
*/
public class DelayedOnClickHandler implements BackgroundTimer.TimeExpireListener {

private static final long SET_ONCLICK_LISTENER_DELAY_IN_MILLISECONDS = 1000;

private final BackgroundTimer backgroundTimer;
private final AbstractActivity activity;
private boolean delayIsFinished = false;


public DelayedOnClickHandler(AbstractActivity activity) {
this.activity = activity;
backgroundTimer = new BackgroundTimer(SET_ONCLICK_LISTENER_DELAY_IN_MILLISECONDS, this);
}


public void onResumeActivity() {
delayIsFinished = false;
backgroundTimer.startTimer();
}


public void onPauseActivity() {
backgroundTimer.stopTimer();
delayIsFinished = false;
}


public boolean delayIsFinished() {
return delayIsFinished;
}


@Override
public void timerExpired() {
delayIsFinished = true;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,10 @@ public boolean isInfoIconVisible() {
return true;
}


@Override
public boolean activityUsesDelayedOnClickHandler() {
return false;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ public class ChooseCopingSkillActivity extends StudentSectionActivityWithTimeout
@Override
public void onClick(CopingSkill copingSkill, List<ItineraryItem> itineraryItems) {
Log.d(Constants.LOG_TAG, "onClick coping skill = " + copingSkill.getName());
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
GlobalHandler globalHandler = GlobalHandler.getInstance(getApplicationContext());
globalHandler.getSessionTracker().onSelectedCopingSkill(ChooseCopingSkillActivity.this, copingSkill, itineraryItems);

Expand Down Expand Up @@ -126,6 +130,10 @@ protected void onCreate(Bundle savedInstanceState) {
findViewById(R.id.imagePlayAudioView).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
playAudioFile();
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,10 @@ public int getResourceIdForActivityLayout() {

@Override
public void onClickImageStudent() {
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
startActivity(new Intent(this, LoginActivity.class));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ public void onClick(View v) {


public void onClickImageStudent() {
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
// go back to students page
GlobalHandler.getInstance(getApplicationContext()).endCurrentSession(this);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ public abstract class ChooseEmotionAbstractActivity extends StudentSectionActivi
@Override
public void onClick(Emotion emotion, List<ItineraryItem> itineraryItems) {
Log.d(Constants.LOG_TAG, "onClick emotion = " + emotion.getName());
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
GlobalHandler globalHandler = GlobalHandler.getInstance(getApplicationContext());

// track selection with GlobalHandler
Expand Down Expand Up @@ -136,6 +140,10 @@ protected void onCreate(Bundle savedInstanceState) {
findViewById(R.id.imagePlayAudioView).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
playAudioHowAreYouFeeling();
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,10 @@ public void finish() {
startActivity(postCopingActivity);
}


@Override
public boolean activityUsesDelayedOnClickHandler() {
return false;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -79,20 +79,32 @@ protected void onCreate(Bundle savedInstanceState) {
findViewById(R.id.viewFeelingUnchanged).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
GlobalHandler.getInstance(getApplicationContext()).getSessionTracker().onSelectedFinishedExerciseEmotion("unchanged");
startActivity(GlobalHandler.getInstance(getApplicationContext()).getSessionTracker().getNextIntent(FinishedExerciseActivity.this));
}
});
findViewById(R.id.viewFeelingOk).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
GlobalHandler.getInstance(getApplicationContext()).getSessionTracker().onSelectedFinishedExerciseEmotion("ok");
goToNextPostCopingSkillActivity();
}
});
findViewById(R.id.viewFeelingHappy).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
GlobalHandler.getInstance(getApplicationContext()).getSessionTracker().onSelectedFinishedExerciseEmotion("happy");
goToNextPostCopingSkillActivity();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,21 @@ protected void onCreate(Bundle savedInstanceState) {
heartSlow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
GlobalHandler.getInstance(getApplicationContext()).getSessionTracker().onSelectedHeartBeat("slow");
goToNextPostCopingSkillActivity();
}
});
heartFast.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
GlobalHandler.getInstance(getApplicationContext()).getSessionTracker().onSelectedHeartBeat("fast");
goToNextPostCopingSkillActivity();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package org.cmucreatelab.android.flutterprek.activities.student_section.coping_skills.post_coping_skills.post_coping_skill_rejoin_friends;

import android.os.Bundle;
import android.util.Log;
import android.view.View;

import org.cmucreatelab.android.flutterprek.Constants;
import org.cmucreatelab.android.flutterprek.GlobalHandler;
import org.cmucreatelab.android.flutterprek.R;
import org.cmucreatelab.android.flutterprek.activities.student_section.coping_skills.post_coping_skills.PostCopingSkillActivity;
Expand All @@ -29,12 +31,20 @@ protected void onCreate(Bundle savedInstanceState) {
findViewById(R.id.imageViewNo).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
startActivity(GlobalHandler.getInstance(getApplicationContext()).getSessionTracker().getNextIntent(RejoinFriendsActivity.this));
}
});
findViewById(R.id.imageViewYes).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
GlobalHandler.getInstance(getApplicationContext()).endCurrentSession(RejoinFriendsActivity.this);
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,20 @@ protected void onCreate(Bundle savedInstanceState) {
findViewById(R.id.imageViewNo).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
goToNextPostCopingSkillActivity();
}
});
findViewById(R.id.imageViewYes).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
goToUseWordsActivity();
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import android.view.View;
import android.widget.GridView;

import org.cmucreatelab.android.flutterprek.Constants;
import org.cmucreatelab.android.flutterprek.R;
import org.cmucreatelab.android.flutterprek.activities.adapters.ClassroomIndexAdapter;
import org.cmucreatelab.android.flutterprek.activities.fragments.DrawerTeacherMainFragment;
Expand Down Expand Up @@ -36,6 +37,10 @@ public void onChanged(@Nullable List<Classroom> classrooms) {
@Override
public void onClick(View v) {
Log.i("activity", "fabNewClassroom.onClick");
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
}
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import android.view.View;
import android.widget.GridView;

import org.cmucreatelab.android.flutterprek.Constants;
import org.cmucreatelab.android.flutterprek.R;
import org.cmucreatelab.android.flutterprek.activities.adapters.CopingSkillIndexAdapter;
import org.cmucreatelab.android.flutterprek.activities.fragments.DrawerTeacherMainFragment;
Expand Down Expand Up @@ -36,6 +37,10 @@ public void onChanged(@Nullable List<CopingSkill> copingSkills) {
@Override
public void onClick(View v) {
Log.i("activity", "fabNewCopingSkill.onClick");
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
}
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import android.view.View;
import android.widget.GridView;

import org.cmucreatelab.android.flutterprek.Constants;
import org.cmucreatelab.android.flutterprek.R;
import org.cmucreatelab.android.flutterprek.activities.adapters.EmotionIndexAdapter;
import org.cmucreatelab.android.flutterprek.activities.fragments.DrawerTeacherMainFragment;
Expand Down Expand Up @@ -36,6 +37,10 @@ public void onChanged(@Nullable List<Emotion> emotions) {
@Override
public void onClick(View v) {
Log.i("activity", "fabNewEmotion.onClick");
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
}
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.EditText;

import org.cmucreatelab.android.flutterprek.Constants;
import org.cmucreatelab.android.flutterprek.R;
import org.cmucreatelab.android.flutterprek.activities.teacher_section.session_index.SessionIndexActivity;

Expand Down Expand Up @@ -51,11 +53,19 @@ public int getResourceIdForActivityLayout() {

@Override
public void onClickImageStudent() {
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
finish();
}


public void onClickButtonLogin() {
if (!activityShouldHandleOnClickEvents()) {
Log.w(Constants.LOG_TAG, "ignoring onclick event when activityShouldHandleOnClickEvents is false");
return;
}
if (checkPassword()) {
findViewById(R.id.textViewErrorPrompt).setVisibility(View.INVISIBLE);
// clear the text field
Expand Down
Loading

0 comments on commit 0879983

Please sign in to comment.