/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.hangout; import android.content.Context; import android.os.Handler; import com.galaxy.meetup.client.android.Intents; import com.galaxy.meetup.client.android.service.Hangout; import com.galaxy.meetup.client.util.Property; /** * * @author sihai * */ public class StressMode { private static StressMode stressMode; private final Context context; private Runnable disconnectRunnable; private final EventHandler eventHandler = new EventHandler(); private Runnable exitMeetingRunnable; private final GCommApp gcommApp; private final Handler handler = new Handler(); private final Hangout.Info hangoutInfo; private Runnable launchGreenRoomRunnable; private Runnable meetingEnterRunnable; private StressMode(Context context1, GCommApp gcommapp, Hangout.Info info) { launchGreenRoomRunnable = new Runnable() { public final void run() { Object aobj[] = new Object[1]; aobj[0] = Boolean.valueOf(StressMode.isEnabled()); Log.debug("StressMode: launchGreenRoom: %s", aobj); if(StressMode.isEnabled()) { android.content.Intent intent = Intents.getHangoutActivityIntent(context, gcommApp.getAccount(), hangoutInfo, false, null); context.startActivity(intent); } } }; meetingEnterRunnable = new Runnable() { public final void run() { Log.debug("StressMode: enterHangout"); gcommApp.enterHangout(hangoutInfo, true, null, false); } }; exitMeetingRunnable = new Runnable() { public final void run() { Log.debug("StressMode: disconnect"); gcommApp.exitMeeting(); } }; disconnectRunnable = new Runnable() { public final void run() { Log.debug("StressMode: disconnect"); gcommApp.disconnect(); handler.postDelayed(launchGreenRoomRunnable, 2000L); } }; context = context1; gcommApp = gcommapp; hangoutInfo = info; gcommapp.registerForEvents(context1, eventHandler, false); } static void initialize(Context context1, GCommApp gcommapp, Hangout.Info info) { if(isEnabled() && stressMode == null) stressMode = new StressMode(context1, gcommapp, info); } static boolean isEnabled() { return Property.HANGOUT_STRESS_MODE.get().toUpperCase().equals("TRUE"); } private void removeCallbacks() { handler.removeCallbacks(launchGreenRoomRunnable); handler.removeCallbacks(meetingEnterRunnable); handler.removeCallbacks(disconnectRunnable); return; } final class EventHandler extends GCommEventHandler { public final void onError(GCommNativeWrapper.Error error) { super.onError(error); removeCallbacks(); handler.postDelayed(launchGreenRoomRunnable, 0L); } public final void onMeetingEnterError(GCommNativeWrapper.MeetingEnterError meetingentererror) { super.onMeetingEnterError(meetingentererror); handler.postDelayed(meetingEnterRunnable, 0L); } public final void onMeetingExited(boolean flag) { super.onMeetingExited(flag); removeCallbacks(); handler.postDelayed(launchGreenRoomRunnable, 0L); } public final void onMeetingMediaStarted() { super.onMeetingMediaStarted(); handler.postDelayed(exitMeetingRunnable, 15000L); } public final void onSignedIn(String s) { super.onSignedIn(s); handler.postDelayed(meetingEnterRunnable, 0L); } public final void onSignedOut() { super.onSignedOut(); removeCallbacks(); handler.postDelayed(launchGreenRoomRunnable, 0L); } public final void onSigninTimeOutError() { super.onSigninTimeOutError(); handler.postDelayed(launchGreenRoomRunnable, 0L); } } }