8 Replies Latest reply on Jul 26, 2011 8:51 AM by WoodMuse

    Timer to Reset to Main State

    WoodMuse

      I have built an application in Flash Catalyst that I am publishing as an Air app for a desktop. I am trying to get the application to go back to the main menu (State1) when 5 minutes in up from any State.  I also would need the timer to reset if I moved States.  The application is an information kiosk and so once a person has stopped using it and left it in say State3, I want it to move back to State1 (menu) for the next person to use. I know that I can’t do this in Catalyst so I am attempting to do it in Builder. However, I have no experience in writing code.  I have been searching though the Forums for help but I really don’t have enough understanding to take something similar and rewrite it for my use.  If anyone could give me some help that would be great. 

      Thanks

        • 1. Re: Timer to Reset to Main State
          CenturyMan1979 Level 2

          Here is some code that should help you out with the timer you need. Make sure you call the timerInit method when your application starts. When you go to a new state/view then just make a call to resetTimer method. Update the "Add Navigation Code Here" with your code for going back to your original state/view.

           

           

          <fx:Script>
               <![CDATA[
                    
                    private var timeout:int = 5; //Timeout value in minutes
                    
                    private var timePassed:int;
                    private var startTime:int;
                    private var loop:Timer;
                    
                    protected function timerInit():void                    
                    {
                         timePassed = 0;
                         startTime = getTimer();
                         loop = new Timer(500);
                         loop.addEventListener(TimerEvent.TIMER, timerCheck);
                         loop.start();
                    }
                    
                    protected function resetTimer():void
                    {
                         startTime = getTimer();
                    }
                    
                    protected function timerCheck(event:TimerEvent):void
                    {
                         timePassed = ((getTimer() - startTime) / 1000) / 60;
                         
                         if (timePassed >= timeout) 
                         {
                              trace("Timeout has been reached");
                              // Add navigation code here
                         }
                    }
                    
               ]]>
          </fx:Script>
          
          • 2. Re: Timer to Reset to Main State
            WoodMuse Level 1

            Ok So I have entered the code in the correct location, but not sure how to do the rest? What is "timerInit method" and how do I call it when my application starts? What is "resetTimer method", how do I call it and where do I put it? Where do I find the "Navigation Code" to put in the area you provided? I am sorry but I am really lost, I have never coded and do not really understand xml.

            • 3. Re: Timer to Reset to Main State
              CenturyMan1979 Level 2

              What is "timerInit method" and how do I call it when my application starts?

               

               

              I am referring to the function called timerInit. To call this function you would go to the Application tag of your application and add the property creationComplete. The value of this property will be "timerInit()". So when your application is created and ready to go it will trigger the creationComplete which we have told to run the timerInit function. Below is an example of the application tag with the creationComplete property added to it.

               

               

              <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
                             xmlns:s="library://ns.adobe.com/flex/spark" 
                             xmlns:mx="library://ns.adobe.com/flex/mx"
                             minWidth="955" minHeight="600" 
                             creationComplete="timerInit()">
              

               

               

               

               

              What is "resetTimer method", how do I call it and where do I put it?

               

               

              Again just referring to the function called resetTimer. When you click a button to change states/views you are executing code to do this. You would just need to add a call to the resetTimer function when you are executing this code. You will probably want to add this code before the code that chages the state/view. It may look something like this if you are changing states,

               

               

              <s:Button id="resetTimerButton" click="resetTimer(); currentState='State2';" />
              

               

               

               

               

              Where do I find the "Navigation Code" to put in the area you provided?

               

               

              The navigation code would be whatever you are doing to go back to the main screen of your application. Are you using a viewstack or just changing states of the application to navigate around?

              • 4. Re: Timer to Reset to Main State
                WoodMuse Level 1

                Ok, got the "timerInit" funtion in the right spot.  The "resetTimer" funtion need to go into my buttons that move from state to state. However, the "click" in my button refer to a "ClickHandler" so do I put the code resetTimer(); in the "ClickHandler"?

                 

                 

                Example of Button:

                 

                 

                <s:Button id="button1" d:userLabel="TourButton" includeIn="Menu" x="134" y="366"

                widh="364" height="292" buttonMode="false" click="tour_clickHandler()"skinClass="components.Tour3">

                Example of ClickHandler with Code inserted:

                protected function tour_clickHandler():void
                   {
                    const state:String = currentState;
                    if ( state == 'Menu' ) {
                     currentState='Tour';        

                     resetTimer();   }

                 

                And yes I am just moving through my states by useing buttons.  I have one Next button and two back buttons.

                 

                • 5. Re: Timer to Reset to Main State
                  CenturyMan1979 Level 2

                  That should work perfectly for reseting the timer. Just remeber you will need to do that everywhere you are going to be changing states.

                   

                  Now for the timerCheck function, just rename "NameOfMainState" to the name of your main state that you want to go to when the timeout occurs.

                   

                  protected function timerCheck(event:TimerEvent):void
                  {
                       timePassed = ((getTimer() - startTime) / 1000) / 60;
                  
                       if (timePassed >= timeout) 
                       {
                              resetTimer(); //Reset the timer back to 0
                  
                           if (state != "NameOfMainState") //If not showing the main state
                              {
                                   state = "NameOfMainState" //Go back to the main state of your application
                              }
                       }
                  }
                  

                  • 6. Re: Timer to Reset to Main State
                    WoodMuse Level 1

                    It Worked!!!!! With a miner adjustment to the timeCheck function. Would not recognize the last two lines, so added "const state:String = currentState;" above and changed "state = "Menu" to "currentState='Menu';". I am not sure why it worked but it looks the same as the state change functions in the clickhandler so I tried it and it work? See code below. If this is improper coding please let me know? Thanks so much for staying with me on this, I could not have done it without help and I have learned a great deal from this. Thanks again!

                     

                     

                    protected function timerCheck(event:TimerEvent):void
                       {
                        timePassed = ((getTimer() - startTime) / 1000) / 60;
                        
                        if (timePassed >= timeout) 
                        {
                          resetTimer(); //Reset the timer back to 0
                         const state:String = currentState;
                         if (state != 'Menu') //If not showing the main state
                            {
                          currentState='Menu'; //Go back to the main state of your application
                         }
                        }
                       }

                     

                    • 7. Re: Timer to Reset to Main State
                      CenturyMan1979 Level 2

                      Well for one thing you shouldn't be using const like this,

                       

                      const state:String = currentState;

                       

                      const means that the variable won't change but you are setting it to a variable that could be changing. Instead it should just be set as a normal variable like so,

                       

                      var state:String = currentState;
                      

                       

                      But since you are just setting the variable state to equal the value of currentState we can instead just remove this line and use the variable currentState when we check to see if we are on the 'Menu' state. So here is the changed code,

                       

                      protected function timerCheck(event:TimerEvent):void
                      {
                           timePassed = ((getTimer() - startTime) / 1000) / 60;
                      
                           if (timePassed >= timeout) 
                           {
                                resetTimer(); //Reset the timer back to 0
                      
                                if (currentState != 'Menu') //If not showing the main state
                                {
                                     currentState='Menu'; //Go back to the main state of your application
                                }
                           }
                      }
                      

                      • 8. Re: Timer to Reset to Main State
                        WoodMuse Level 1

                        I have made the changes, Thanks again!