refactor
This commit is contained in:
		| @@ -1,6 +1,7 @@ | ||||
| package org.solovyev.android.calculator; | ||||
|  | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| import org.solovyev.android.calculator.external.CalculatorExternalListenersContainer; | ||||
| import org.solovyev.android.calculator.history.CalculatorHistory; | ||||
|  | ||||
| /** | ||||
| @@ -17,7 +18,8 @@ public interface CalculatorLocator { | ||||
|               @NotNull CalculatorHistory history, | ||||
|               @NotNull CalculatorLogger logger, | ||||
|               @NotNull CalculatorPreferenceService preferenceService, | ||||
|               @NotNull CalculatorKeyboard keyboard); | ||||
|               @NotNull CalculatorKeyboard keyboard, | ||||
| 			  @NotNull CalculatorExternalListenersContainer externalListenersContainer); | ||||
|  | ||||
|     @NotNull | ||||
|     Calculator getCalculator(); | ||||
| @@ -48,4 +50,7 @@ public interface CalculatorLocator { | ||||
|  | ||||
|     @NotNull | ||||
|     CalculatorPreferenceService getPreferenceService(); | ||||
|  | ||||
| 	@NotNull | ||||
| 	CalculatorExternalListenersContainer getExternalListenersContainer(); | ||||
| } | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| package org.solovyev.android.calculator; | ||||
|  | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| import org.solovyev.android.calculator.external.CalculatorExternalListenersContainer; | ||||
| import org.solovyev.android.calculator.history.CalculatorHistory; | ||||
|  | ||||
| /** | ||||
| @@ -43,6 +44,9 @@ public class CalculatorLocatorImpl implements CalculatorLocator { | ||||
|     @NotNull | ||||
|     private CalculatorPreferenceService calculatorPreferenceService; | ||||
|  | ||||
| 	@NotNull | ||||
|     private CalculatorExternalListenersContainer calculatorExternalListenersContainer; | ||||
|  | ||||
|     public CalculatorLocatorImpl() { | ||||
|     } | ||||
|  | ||||
| @@ -54,7 +58,8 @@ public class CalculatorLocatorImpl implements CalculatorLocator { | ||||
|                      @NotNull CalculatorHistory history, | ||||
|                      @NotNull CalculatorLogger logger, | ||||
|                      @NotNull CalculatorPreferenceService preferenceService, | ||||
|                      @NotNull CalculatorKeyboard keyboard) { | ||||
|                      @NotNull CalculatorKeyboard keyboard, | ||||
| 					 @NotNull CalculatorExternalListenersContainer externalListenersContainer) { | ||||
|  | ||||
|         this.calculator = calculator; | ||||
|         this.calculatorEngine = engine; | ||||
| @@ -63,6 +68,7 @@ public class CalculatorLocatorImpl implements CalculatorLocator { | ||||
|         this.calculatorHistory = history; | ||||
|         this.calculatorLogger = logger; | ||||
|         this.calculatorPreferenceService = preferenceService; | ||||
| 		this.calculatorExternalListenersContainer = externalListenersContainer; | ||||
|  | ||||
|         calculatorEditor = new CalculatorEditorImpl(this.calculator); | ||||
|         calculatorDisplay = new CalculatorDisplayImpl(this.calculator); | ||||
| @@ -133,4 +139,10 @@ public class CalculatorLocatorImpl implements CalculatorLocator { | ||||
|     public CalculatorPreferenceService getPreferenceService() { | ||||
|         return this.calculatorPreferenceService; | ||||
|     } | ||||
|  | ||||
| 	@Override | ||||
| 	@NotNull | ||||
| 	public CalculatorExternalListenersContainer getExternalListenersContainer() { | ||||
| 		return calculatorExternalListenersContainer; | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,10 @@ | ||||
| package org.solovyev.android.calculator.external; | ||||
|  | ||||
| import org.jetbrains.annotations.NotNull; | ||||
|  | ||||
| public interface CalculatorExternalListenersContainer { | ||||
|  | ||||
| 	void addExternalListener(@NotNull Class<?> externalCalculatorClass); | ||||
|  | ||||
| 	boolean removeExternalListener(@NotNull Class<?> externalCalculatorClass); | ||||
| } | ||||
| @@ -1,6 +1,7 @@ | ||||
| package org.solovyev.android.calculator; | ||||
|  | ||||
| import org.mockito.Mockito; | ||||
| import org.solovyev.android.calculator.external.CalculatorExternalListenersContainer; | ||||
| import org.solovyev.android.calculator.history.CalculatorHistory; | ||||
|  | ||||
| /** | ||||
| @@ -11,7 +12,7 @@ import org.solovyev.android.calculator.history.CalculatorHistory; | ||||
| public class AbstractCalculatorTest { | ||||
|  | ||||
|     protected void setUp() throws Exception { | ||||
|         CalculatorLocatorImpl.getInstance().init(new CalculatorImpl(), CalculatorTestUtils.newCalculatorEngine(), Mockito.mock(CalculatorClipboard.class), Mockito.mock(CalculatorNotifier.class), Mockito.mock(CalculatorHistory.class), new SystemOutCalculatorLogger(), Mockito.mock(CalculatorPreferenceService.class), Mockito.mock(CalculatorKeyboard.class)); | ||||
|         CalculatorLocatorImpl.getInstance().init(new CalculatorImpl(), CalculatorTestUtils.newCalculatorEngine(), Mockito.mock(CalculatorClipboard.class), Mockito.mock(CalculatorNotifier.class), Mockito.mock(CalculatorHistory.class), new SystemOutCalculatorLogger(), Mockito.mock(CalculatorPreferenceService.class), Mockito.mock(CalculatorKeyboard.class), Mockito.mock(CalculatorExternalListenersContainer.class)); | ||||
|         CalculatorLocatorImpl.getInstance().getEngine().init(); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -5,6 +5,7 @@ import junit.framework.Assert; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| import org.jetbrains.annotations.Nullable; | ||||
| import org.mockito.Mockito; | ||||
| import org.solovyev.android.calculator.external.CalculatorExternalListenersContainer; | ||||
| import org.solovyev.android.calculator.history.CalculatorHistory; | ||||
| import org.solovyev.android.calculator.jscl.JsclOperation; | ||||
|  | ||||
| @@ -23,7 +24,7 @@ public class CalculatorTestUtils { | ||||
|     public static final int TIMEOUT = 3; | ||||
|  | ||||
|     public static void staticSetUp() throws Exception { | ||||
|         CalculatorLocatorImpl.getInstance().init(new CalculatorImpl(), newCalculatorEngine(), Mockito.mock(CalculatorClipboard.class), Mockito.mock(CalculatorNotifier.class), Mockito.mock(CalculatorHistory.class), new SystemOutCalculatorLogger(), Mockito.mock(CalculatorPreferenceService.class), Mockito.mock(CalculatorKeyboard.class)); | ||||
|         CalculatorLocatorImpl.getInstance().init(new CalculatorImpl(), newCalculatorEngine(), Mockito.mock(CalculatorClipboard.class), Mockito.mock(CalculatorNotifier.class), Mockito.mock(CalculatorHistory.class), new SystemOutCalculatorLogger(), Mockito.mock(CalculatorPreferenceService.class), Mockito.mock(CalculatorKeyboard.class), Mockito.mock(CalculatorExternalListenersContainer.class)); | ||||
|         CalculatorLocatorImpl.getInstance().getEngine().init(); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -11,10 +11,10 @@ import org.acra.ReportingInteractionMode; | ||||
| import org.acra.annotation.ReportsCrashes; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| import org.solovyev.android.ads.AdsController; | ||||
| import org.solovyev.android.calculator.external.AndroidExternalListenersContainer; | ||||
| import org.solovyev.android.calculator.history.AndroidCalculatorHistory; | ||||
| import org.solovyev.android.calculator.model.AndroidCalculatorEngine; | ||||
| import org.solovyev.android.calculator.overlay.CalculatorOverlayService; | ||||
| import org.solovyev.android.calculator.widget.CalculatorWidgetHelper; | ||||
|  | ||||
| /** | ||||
|  * User: serso | ||||
| @@ -49,11 +49,6 @@ public class CalculatorApplication extends android.app.Application { | ||||
|  | ||||
|     @NotNull | ||||
|     private static CalculatorApplication instance; | ||||
|  | ||||
|     @SuppressWarnings("FieldCanBeLocal")// in order not to be garbage collected | ||||
|     @NotNull | ||||
|     private CalculatorWidgetHelper widgetHelper; | ||||
|  | ||||
|     /* | ||||
|     ********************************************************************** | ||||
|     * | ||||
| @@ -94,14 +89,11 @@ public class CalculatorApplication extends android.app.Application { | ||||
|                 new AndroidCalculatorHistory(this, calculator), | ||||
|                 new AndroidCalculatorLogger(), | ||||
|                 new AndroidCalculatorPreferenceService(this), | ||||
|                 new AndroidCalculatorKeyboard(this, new CalculatorKeyboardImpl(calculator))); | ||||
|                 new AndroidCalculatorKeyboard(this, new CalculatorKeyboardImpl(calculator)), | ||||
| 				new AndroidExternalListenersContainer(calculator)); | ||||
|  | ||||
|         CalculatorLocatorImpl.getInstance().getCalculator().init(); | ||||
|  | ||||
|         // in order to not to be garbage collected | ||||
|         widgetHelper = new CalculatorWidgetHelper(); | ||||
|         CalculatorLocatorImpl.getInstance().getCalculator().addCalculatorEventListener(widgetHelper); | ||||
|  | ||||
|         BillingDB.init(CalculatorApplication.this); | ||||
|  | ||||
|         AdsController.getInstance().init(ADMOB_USER_ID, AD_FREE_PRODUCT_ID, new BillingController.IConfiguration() { | ||||
|   | ||||
| @@ -1,10 +1,11 @@ | ||||
| package org.solovyev.android.calculator.widget; | ||||
| package org.solovyev.android.calculator.external; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.content.Intent; | ||||
| import android.os.Parcelable; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| import org.jetbrains.annotations.Nullable; | ||||
| import org.solovyev.android.calculator.Calculator; | ||||
| import org.solovyev.android.calculator.CalculatorApplication; | ||||
| import org.solovyev.android.calculator.CalculatorDisplayChangeEventData; | ||||
| import org.solovyev.android.calculator.CalculatorDisplayViewState; | ||||
| @@ -27,7 +28,7 @@ import java.util.Set; | ||||
|  * Date: 10/19/12 | ||||
|  * Time: 11:11 PM | ||||
|  */ | ||||
| public class CalculatorWidgetHelper implements CalculatorEventListener { | ||||
| public class AndroidExternalListenersContainer implements CalculatorExternalListenersContainer, CalculatorEventListener { | ||||
| 
 | ||||
| 	/* | ||||
| 		********************************************************************** | ||||
| @@ -44,16 +45,16 @@ public class CalculatorWidgetHelper implements CalculatorEventListener { | ||||
| 
 | ||||
| 	private static final String TAG = "Calculator++ External Listener Helper"; | ||||
| 
 | ||||
| 	private static final Set<Class<?>> externalListeners = new HashSet<Class<?>>(); | ||||
| 	private final Set<Class<?>> externalListeners = new HashSet<Class<?>>(); | ||||
| 
 | ||||
| 	@NotNull | ||||
|     private final CalculatorEventHolder lastEvent = new CalculatorEventHolder(CalculatorUtils.createFirstEventDataId()); | ||||
| 
 | ||||
|     public CalculatorWidgetHelper() { | ||||
|         CalculatorLocatorImpl.getInstance().getCalculator().addCalculatorEventListener(this); | ||||
|     } | ||||
|     public AndroidExternalListenersContainer(@NotNull Calculator calculator) { | ||||
| 		calculator.addCalculatorEventListener(this); | ||||
| 	} | ||||
| 
 | ||||
| 	public static void onEditorStateChanged(@NotNull Context context, | ||||
| 	public void onEditorStateChanged(@NotNull Context context, | ||||
| 											@NotNull CalculatorEventData calculatorEventData, | ||||
| 											@NotNull CalculatorEditorViewState editorViewState) { | ||||
| 
 | ||||
| @@ -67,7 +68,7 @@ public class CalculatorWidgetHelper implements CalculatorEventListener { | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public static void onDisplayStateChanged(@NotNull Context context, | ||||
| 	private void onDisplayStateChanged(@NotNull Context context, | ||||
| 											 @NotNull CalculatorEventData calculatorEventData, | ||||
| 											 @NotNull CalculatorDisplayViewState displayViewState) { | ||||
| 		for (Class<?> externalListener : externalListeners) { | ||||
| @@ -80,11 +81,13 @@ public class CalculatorWidgetHelper implements CalculatorEventListener { | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public static void addExternalListener(@NotNull Class<?> externalCalculatorClass) { | ||||
| 	@Override | ||||
| 	public void addExternalListener(@NotNull Class<?> externalCalculatorClass) { | ||||
| 		externalListeners.add(externalCalculatorClass); | ||||
| 	} | ||||
| 
 | ||||
| 	public static boolean removeExternalListener(@NotNull Class<?> externalCalculatorClass) { | ||||
| 	@Override | ||||
| 	public boolean removeExternalListener(@NotNull Class<?> externalCalculatorClass) { | ||||
| 		return externalListeners.remove(externalCalculatorClass); | ||||
| 	} | ||||
| 
 | ||||
| @@ -7,7 +7,6 @@ import org.jetbrains.annotations.NotNull; | ||||
| import org.solovyev.android.calculator.CalculatorDisplayViewState; | ||||
| import org.solovyev.android.calculator.CalculatorEditorViewState; | ||||
| import org.solovyev.android.calculator.CalculatorLocatorImpl; | ||||
| import org.solovyev.android.calculator.widget.CalculatorWidgetHelper; | ||||
| import org.solovyev.common.MutableObject; | ||||
|  | ||||
| /** | ||||
| @@ -35,10 +34,10 @@ public class DefaultExternalCalculatorIntentHandler implements ExternalCalculato | ||||
|     @Override | ||||
|     public void onIntent(@NotNull Context context, @NotNull Intent intent) { | ||||
|  | ||||
|         if (CalculatorWidgetHelper.EDITOR_STATE_CHANGED_ACTION.equals(intent.getAction())) { | ||||
|         if (AndroidExternalListenersContainer.EDITOR_STATE_CHANGED_ACTION.equals(intent.getAction())) { | ||||
|             CalculatorLocatorImpl.getInstance().getNotifier().showDebugMessage(TAG, "Editor state changed broadcast received!"); | ||||
|  | ||||
|             final Long eventId = intent.getLongExtra(CalculatorWidgetHelper.EVENT_ID_EXTRA, 0L); | ||||
|             final Long eventId = intent.getLongExtra(AndroidExternalListenersContainer.EVENT_ID_EXTRA, 0L); | ||||
|  | ||||
|             boolean updateEditor = false; | ||||
|             synchronized (lastEditorEventId) { | ||||
| @@ -49,15 +48,15 @@ public class DefaultExternalCalculatorIntentHandler implements ExternalCalculato | ||||
|             } | ||||
|  | ||||
|             if (updateEditor) { | ||||
|                 final Parcelable object = intent.getParcelableExtra(CalculatorWidgetHelper.EDITOR_STATE_EXTRA); | ||||
|                 final Parcelable object = intent.getParcelableExtra(AndroidExternalListenersContainer.EDITOR_STATE_EXTRA); | ||||
|                 if (object instanceof CalculatorEditorViewState) { | ||||
|                     onEditorStateChanged(context, (CalculatorEditorViewState) object); | ||||
|                 } | ||||
|             } | ||||
|         } else if (CalculatorWidgetHelper.DISPLAY_STATE_CHANGED_ACTION.equals(intent.getAction())) { | ||||
|         } else if (AndroidExternalListenersContainer.DISPLAY_STATE_CHANGED_ACTION.equals(intent.getAction())) { | ||||
|             CalculatorLocatorImpl.getInstance().getNotifier().showDebugMessage(TAG, "Display state changed broadcast received!"); | ||||
|  | ||||
|             final Long eventId = intent.getLongExtra(CalculatorWidgetHelper.EVENT_ID_EXTRA, 0L); | ||||
|             final Long eventId = intent.getLongExtra(AndroidExternalListenersContainer.EVENT_ID_EXTRA, 0L); | ||||
|             boolean updateDisplay = false; | ||||
|             synchronized (lastDisplayEventId) { | ||||
|                 if (eventId > lastDisplayEventId.getObject()) { | ||||
| @@ -67,7 +66,7 @@ public class DefaultExternalCalculatorIntentHandler implements ExternalCalculato | ||||
|             } | ||||
|  | ||||
|             if (updateDisplay) { | ||||
|                 final Parcelable object = intent.getParcelableExtra(CalculatorWidgetHelper.DISPLAY_STATE_EXTRA); | ||||
|                 final Parcelable object = intent.getParcelableExtra(AndroidExternalListenersContainer.DISPLAY_STATE_EXTRA); | ||||
|                 if (object instanceof CalculatorDisplayViewState) { | ||||
|                     onDisplayStateChanged(context, (CalculatorDisplayViewState) object); | ||||
|                 } | ||||
|   | ||||
| @@ -1,10 +0,0 @@ | ||||
| package org.solovyev.android.calculator.external; | ||||
|  | ||||
| /** | ||||
|  * User: serso | ||||
|  * Date: 11/20/12 | ||||
|  * Time: 10:14 PM | ||||
|  */ | ||||
| public class ExternalCalculatorHelper { | ||||
|  | ||||
| } | ||||
| @@ -14,11 +14,11 @@ import org.jetbrains.annotations.NotNull; | ||||
| import org.jetbrains.annotations.Nullable; | ||||
| import org.solovyev.android.calculator.CalculatorDisplayViewState; | ||||
| import org.solovyev.android.calculator.CalculatorEditorViewState; | ||||
| import org.solovyev.android.calculator.CalculatorLocatorImpl; | ||||
| import org.solovyev.android.calculator.R; | ||||
| import org.solovyev.android.calculator.external.DefaultExternalCalculatorIntentHandler; | ||||
| import org.solovyev.android.calculator.external.ExternalCalculatorIntentHandler; | ||||
| import org.solovyev.android.calculator.external.ExternalCalculatorStateUpdater; | ||||
| import org.solovyev.android.calculator.widget.CalculatorWidgetHelper; | ||||
| import org.solovyev.android.calculator.widget.WidgetButton; | ||||
|  | ||||
| /** | ||||
| @@ -75,7 +75,7 @@ public class CalculatorOverlayService extends Service implements ExternalCalcula | ||||
|     } | ||||
|  | ||||
|     private void startCalculatorListening() { | ||||
|         CalculatorWidgetHelper.addExternalListener(getIntentListenerClass()); | ||||
|         CalculatorLocatorImpl.getInstance().getExternalListenersContainer().addExternalListener(getIntentListenerClass()); | ||||
|     } | ||||
|  | ||||
|     @NotNull | ||||
| @@ -84,7 +84,7 @@ public class CalculatorOverlayService extends Service implements ExternalCalcula | ||||
|     } | ||||
|  | ||||
|     private void stopCalculatorListening() { | ||||
|         CalculatorWidgetHelper.removeExternalListener(getIntentListenerClass()); | ||||
| 		CalculatorLocatorImpl.getInstance().getExternalListenersContainer().removeExternalListener(getIntentListenerClass()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -10,7 +10,11 @@ import android.text.Html; | ||||
| import android.widget.RemoteViews; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| import org.jetbrains.annotations.Nullable; | ||||
| import org.solovyev.android.calculator.*; | ||||
| import org.solovyev.android.calculator.CalculatorButtons; | ||||
| import org.solovyev.android.calculator.CalculatorDisplayViewState; | ||||
| import org.solovyev.android.calculator.CalculatorEditorViewState; | ||||
| import org.solovyev.android.calculator.CalculatorLocatorImpl; | ||||
| import org.solovyev.android.calculator.R; | ||||
| import org.solovyev.android.calculator.external.ExternalCalculatorIntentHandler; | ||||
| import org.solovyev.android.calculator.external.ExternalCalculatorStateUpdater; | ||||
|  | ||||
| @@ -52,7 +56,7 @@ abstract class AbstractCalculatorWidgetProvider extends AppWidgetProvider implem | ||||
|     protected AbstractCalculatorWidgetProvider() { | ||||
|         final Class<? extends AppWidgetProvider> componentClass = this.getComponentClass(); | ||||
|  | ||||
|         CalculatorWidgetHelper.addExternalListener(componentClass); | ||||
|         CalculatorLocatorImpl.getInstance().getExternalListenersContainer().addExternalListener(componentClass); | ||||
|     } | ||||
|  | ||||
|     /* | ||||
|   | ||||
| @@ -5,6 +5,7 @@ import jscl.JsclMathEngine; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| import org.jetbrains.annotations.Nullable; | ||||
| import org.mockito.Mockito; | ||||
| import org.solovyev.android.calculator.external.CalculatorExternalListenersContainer; | ||||
| import org.solovyev.android.calculator.history.CalculatorHistory; | ||||
|  | ||||
| /** | ||||
| @@ -15,7 +16,7 @@ import org.solovyev.android.calculator.history.CalculatorHistory; | ||||
| public class CalculatorTestUtils { | ||||
|  | ||||
|     public static void staticSetUp(@Nullable Context context) throws Exception { | ||||
|         CalculatorLocatorImpl.getInstance().init(new CalculatorImpl(), newCalculatorEngine(), Mockito.mock(CalculatorClipboard.class), Mockito.mock(CalculatorNotifier.class), Mockito.mock(CalculatorHistory.class), new SystemOutCalculatorLogger(), Mockito.mock(CalculatorPreferenceService.class), Mockito.mock(CalculatorKeyboard.class)); | ||||
|         CalculatorLocatorImpl.getInstance().init(new CalculatorImpl(), newCalculatorEngine(), Mockito.mock(CalculatorClipboard.class), Mockito.mock(CalculatorNotifier.class), Mockito.mock(CalculatorHistory.class), new SystemOutCalculatorLogger(), Mockito.mock(CalculatorPreferenceService.class), Mockito.mock(CalculatorKeyboard.class), Mockito.mock(CalculatorExternalListenersContainer.class)); | ||||
|         CalculatorLocatorImpl.getInstance().getEngine().init(); | ||||
|  | ||||
|         if ( context != null ) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Sergey Solovyev
					Sergey Solovyev