88import com .codename1 .location .LocationManager ;
99import com .codename1 .media .Media ;
1010import com .codename1 .media .MediaRecorderBuilder ;
11+ import com .codename1 .ui .Button ;
1112import com .codename1 .ui .Display ;
1213import com .codename1 .ui .PeerComponent ;
1314import com .codename1 .ui .Stroke ;
1415import com .codename1 .ui .TextArea ;
1516import com .codename1 .ui .TextField ;
17+ import com .codename1 .ui .TextSelection ;
1618import com .codename1 .ui .events .ActionListener ;
1719import com .codename1 .ui .geom .Dimension ;
1820import com .codename1 .ui .util .ImageIO ;
@@ -99,13 +101,63 @@ public class TestCodenameOneImplementation extends CodenameOneImplementation {
99101 private boolean nativeBrowserWindowShowInvoked ;
100102 private boolean nativeBrowserWindowCleanupInvoked ;
101103 private boolean nativeBrowserWindowHideInvoked ;
104+ private boolean nativeImageCacheSupported ;
105+ private int initializeTextSelectionCount ;
106+ private int deinitializeTextSelectionCount ;
107+ private TextSelection lastInitializedTextSelection ;
108+ private TextSelection lastDeinitializedTextSelection ;
109+ private final Map <Object , HeavyButtonPeerState > heavyButtonPeers = new HashMap <Object , HeavyButtonPeerState >();
110+ private boolean requiresHeavyButton ;
102111
103112
104113 public TestCodenameOneImplementation () {
105114 this (true );
106115 instance = this ;
107116 }
108117
118+ public static class HeavyButtonPeerState {
119+ private final List <ActionListener > listeners = new ArrayList <ActionListener >();
120+ private int x ;
121+ private int y ;
122+ private int width ;
123+ private int height ;
124+ private boolean initCalled ;
125+ private boolean deinitCalled ;
126+ private int updateCount ;
127+
128+ public List <ActionListener > getListeners () {
129+ return listeners ;
130+ }
131+
132+ public int getX () {
133+ return x ;
134+ }
135+
136+ public int getY () {
137+ return y ;
138+ }
139+
140+ public int getWidth () {
141+ return width ;
142+ }
143+
144+ public int getHeight () {
145+ return height ;
146+ }
147+
148+ public boolean isInitCalled () {
149+ return initCalled ;
150+ }
151+
152+ public boolean isDeinitCalled () {
153+ return deinitCalled ;
154+ }
155+
156+ public int getUpdateCount () {
157+ return updateCount ;
158+ }
159+ }
160+
109161 @ Override
110162 public InputStream getResourceAsStream (Class cls , String resource ) {
111163 return resourceAsStreams .get (resource );
@@ -115,6 +167,45 @@ public void putResource(String s, InputStream i) {
115167 resourceAsStreams .put (s , i );
116168 }
117169
170+ public void setSupportsNativeImageCache (boolean supported ) {
171+ nativeImageCacheSupported = supported ;
172+ }
173+
174+ public void resetTextSelectionTracking () {
175+ initializeTextSelectionCount = 0 ;
176+ deinitializeTextSelectionCount = 0 ;
177+ lastInitializedTextSelection = null ;
178+ lastDeinitializedTextSelection = null ;
179+ }
180+
181+ public int getInitializeTextSelectionCount () {
182+ return initializeTextSelectionCount ;
183+ }
184+
185+ public int getDeinitializeTextSelectionCount () {
186+ return deinitializeTextSelectionCount ;
187+ }
188+
189+ public TextSelection getLastInitializedTextSelection () {
190+ return lastInitializedTextSelection ;
191+ }
192+
193+ public TextSelection getLastDeinitializedTextSelection () {
194+ return lastDeinitializedTextSelection ;
195+ }
196+
197+ public void setRequiresHeavyButton (boolean requiresHeavyButton ) {
198+ this .requiresHeavyButton = requiresHeavyButton ;
199+ }
200+
201+ public void resetHeavyButtonTracking () {
202+ heavyButtonPeers .clear ();
203+ }
204+
205+ public HeavyButtonPeerState getHeavyButtonPeerState (Object peer ) {
206+ return heavyButtonPeers .get (peer );
207+ }
208+
118209 @ Override
119210 public boolean isNativeTitle () {
120211 return nativeTitle ;
@@ -133,6 +224,11 @@ public void setMutableImagesFast(boolean mutableImagesFast) {
133224 this .mutableImagesFast = mutableImagesFast ;
134225 }
135226
227+ @ Override
228+ public boolean supportsNativeImageCache () {
229+ return nativeImageCacheSupported ;
230+ }
231+
136232 @ Override
137233 public AsyncResource <Media > createBackgroundMediaAsync (String uri ) {
138234 return backgroundMediaAsync ;
@@ -174,6 +270,18 @@ public void setMediaAsync(AsyncResource<Media> mediaAsync) {
174270 this .mediaAsync = mediaAsync ;
175271 }
176272
273+ @ Override
274+ public void initializeTextSelection (TextSelection aThis ) {
275+ initializeTextSelectionCount ++;
276+ lastInitializedTextSelection = aThis ;
277+ }
278+
279+ @ Override
280+ public void deinitializeTextSelection (TextSelection aThis ) {
281+ deinitializeTextSelectionCount ++;
282+ lastDeinitializedTextSelection = aThis ;
283+ }
284+
177285 @ Override
178286 public void startRemoteControl () {
179287 startRemoteControlInvocations ++;
@@ -184,6 +292,62 @@ public void stopRemoteControl() {
184292 stopRemoteControlInvocations ++;
185293 }
186294
295+ @ Override
296+ public Object createHeavyButton (Button aThis ) {
297+ HeavyButtonPeerState state = new HeavyButtonPeerState ();
298+ heavyButtonPeers .put (state , state );
299+ return state ;
300+ }
301+
302+ @ Override
303+ public void addHeavyActionListener (Object peer , ActionListener l ) {
304+ HeavyButtonPeerState state = heavyButtonPeers .get (peer );
305+ if (state != null ) {
306+ state .getListeners ().add (l );
307+ }
308+ }
309+
310+ @ Override
311+ public void removeHeavyActionListener (Object peer , ActionListener l ) {
312+ HeavyButtonPeerState state = heavyButtonPeers .get (peer );
313+ if (state != null ) {
314+ state .getListeners ().remove (l );
315+ }
316+ }
317+
318+ @ Override
319+ public void updateHeavyButtonBounds (Object peer , int x , int y , int width , int height ) {
320+ HeavyButtonPeerState state = heavyButtonPeers .get (peer );
321+ if (state != null ) {
322+ state .x = x ;
323+ state .y = y ;
324+ state .width = width ;
325+ state .height = height ;
326+ state .updateCount ++;
327+ }
328+ }
329+
330+ @ Override
331+ public void initHeavyButton (Object peer ) {
332+ HeavyButtonPeerState state = heavyButtonPeers .get (peer );
333+ if (state != null ) {
334+ state .initCalled = true ;
335+ }
336+ }
337+
338+ @ Override
339+ public void deinitializeHeavyButton (Object peer ) {
340+ HeavyButtonPeerState state = heavyButtonPeers .get (peer );
341+ if (state != null ) {
342+ state .deinitCalled = true ;
343+ }
344+ }
345+
346+ @ Override
347+ public boolean requiresHeavyButtonForCopyToClipboard () {
348+ return requiresHeavyButton ;
349+ }
350+
187351 public int getStartRemoteControlInvocations () {
188352 return startRemoteControlInvocations ;
189353 }
@@ -523,6 +687,18 @@ public void setTransformScale(Object transform, float scaleX, float scaleY, floa
523687 ((TestTransform ) transform ).setScale (scaleX , scaleY , scaleZ );
524688 }
525689
690+ @ Override
691+ public Object makeTransformRotation (float angle , float x , float y , float z ) {
692+ TestTransform transform = new TestTransform ();
693+ transform .setRotation (angle , x , y );
694+ return transform ;
695+ }
696+
697+ @ Override
698+ public void setTransformRotation (Object transform , float angle , float x , float y , float z ) {
699+ ((TestTransform ) transform ).setRotation (angle , x , y );
700+ }
701+
526702 @ Override
527703 public Object makeTransformAffine (double m00 , double m10 , double m01 , double m11 , double m02 , double m12 ) {
528704 TestTransform transform = new TestTransform ();
@@ -1169,6 +1345,10 @@ public String getPlatformName() {
11691345
11701346 @ Override
11711347 public L10NManager getLocalizationManager () {
1348+ if (localizationManager == null ) {
1349+ localizationManager = new L10NManager ("en" , "US" ) {
1350+ };
1351+ }
11721352 return localizationManager ;
11731353 }
11741354
@@ -1380,6 +1560,18 @@ void setScale(float sx, float sy, float sz) {
13801560 m22 = sz ;
13811561 }
13821562
1563+ void setRotation (float angle , float px , float py ) {
1564+ setIdentity ();
1565+ float cos = (float ) Math .cos (angle );
1566+ float sin = (float ) Math .sin (angle );
1567+ m00 = cos ;
1568+ m01 = -sin ;
1569+ m10 = sin ;
1570+ m11 = cos ;
1571+ m02 = px - px * cos + py * sin ;
1572+ m12 = py - px * sin - py * cos ;
1573+ }
1574+
13831575 void setAffine (float nm00 , float nm01 , float nm02 , float nm10 , float nm11 , float nm12 ) {
13841576 m00 = nm00 ;
13851577 m01 = nm01 ;
0 commit comments