From ae1d33df5bcf624d2f139e4f6f9335a471e028f4 Mon Sep 17 00:00:00 2001 From: Senad Uka Date: Fri, 24 Jan 2014 07:02:44 +0100 Subject: [PATCH] server ready for testing - but untested --- .../RemoteControlServer.java | 8 +-- .../qurantranslationdisplay/ShowAyah.java | 58 ++++++++++++++++++- 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/src/com/mhalka/qurantranslationdisplay/RemoteControlServer.java b/src/com/mhalka/qurantranslationdisplay/RemoteControlServer.java index 7548cdc..f707168 100644 --- a/src/com/mhalka/qurantranslationdisplay/RemoteControlServer.java +++ b/src/com/mhalka/qurantranslationdisplay/RemoteControlServer.java @@ -3,11 +3,13 @@ package com.mhalka.qurantranslationdisplay; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import android.app.Activity; import android.util.Log; -public class RemoteControlServer{ +public class RemoteControlServer { public static final String SERVERIP = "0.0.0.0"; public static final int SERVERPORT = 4444; @@ -32,13 +34,11 @@ public class RemoteControlServer{ @Override public void recieve(String command) { - // dummy implementation to be sure there is something to call - + // dummy interface } }); } - public void run() { DatagramSocket socket = null; try { diff --git a/src/com/mhalka/qurantranslationdisplay/ShowAyah.java b/src/com/mhalka/qurantranslationdisplay/ShowAyah.java index 9326309..3ce8781 100644 --- a/src/com/mhalka/qurantranslationdisplay/ShowAyah.java +++ b/src/com/mhalka/qurantranslationdisplay/ShowAyah.java @@ -1,5 +1,9 @@ package com.mhalka.qurantranslationdisplay; +import java.util.Date; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import com.mhalka.qurantranslationdisplay.RemoteControlServer.OnCommandRecieved; import com.mhalka.qurantranslationdisplay.VerticalMarqueeTextView.ScrollingStoppedListener; @@ -7,9 +11,12 @@ import android.app.Activity; import android.content.res.AssetManager; import android.os.AsyncTask; import android.os.Bundle; +import android.os.Handler; import android.text.method.ScrollingMovementMethod; import android.util.DisplayMetrics; import android.util.Log; +import android.util.TypedValue; +import android.view.View; import android.view.animation.Animation; import android.view.animation.LinearInterpolator; import android.view.animation.TranslateAnimation; @@ -26,12 +33,15 @@ import android.widget.TextView; public class ShowAyah extends Activity { private static int NUMBER_OF_MILISECONDS_TO_READ_ONE_LINE = 2500; + private static int NUMBER_OF_MINUTES_BEFORE_RESTARTING_SLIDESHOW = 5; private VerticalMarqueeTextView ayah; private TextView chapterName; int currentChapter=1; int currentVerse=1; private RemoteControlServer rcs; private ServerTask server; + private Handler pauseHandler = new Handler(); + private long timeAyahChanged = 0; @@ -155,9 +165,55 @@ public class ShowAyah extends Activity { @Override public void recieve(String command) { - // TODO parse the command and do it ! + String pattern = "([SF])(\\d+)(A?)(\\d*)"; + + // Create a Pattern object + Pattern r = Pattern.compile(pattern); + + // Now create matcher object. + Matcher m = r.matcher(command); + if (m.find()) { + String commandName = m.group(0); + String firstParameter = m.group(1); + if(commandName.equals("S")) { + String secondParameter = m.group(3); + int surah = Integer.parseInt(firstParameter); + int ayah = Integer.parseInt(secondParameter); + handleAyahChange(surah, ayah); + } + else if(commandName.equals("F")) { + int size = Integer.parseInt(firstParameter); + ayah.setTextSize(TypedValue.COMPLEX_UNIT_SP, (float)size); + + } + } else { + System.out.println("NO MATCH"); + } + } + + private void handleAyahChange(int surahNumber, int ayahNumber) { + showAyah(surahNumber, ayahNumber); + timeAyahChanged = (new Date()).getTime(); + ayah.pauseMarquee(); + pauseHandler.postDelayed(new Runnable() { + + @Override + public void run() { + long timeNow = (new Date()).getTime(); + long difference = timeNow - timeAyahChanged; + + boolean imamFinishedSwitchingAyahs = difference >= NUMBER_OF_MINUTES_BEFORE_RESTARTING_SLIDESHOW * 60 * 1000; + if(imamFinishedSwitchingAyahs) { + ayah.resumeMarquee(); + } + // else next posted runnable will try handle the continuation + + } + // 100 miliseconds after period should expire try to unpause the slideshow + }, (NUMBER_OF_MINUTES_BEFORE_RESTARTING_SLIDESHOW * 60 * 1000) + 100); + } }); server.execute(""); }