Skip to content

Commit c20489e

Browse files
committed
better screen size detection
1 parent 69af3c8 commit c20489e

File tree

5 files changed

+138
-44
lines changed

5 files changed

+138
-44
lines changed

core/src/processing/android/PFragment.java

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,32 +25,66 @@
2525
import android.app.Fragment;
2626
import android.content.pm.ActivityInfo;
2727
import android.content.res.Configuration;
28+
import android.graphics.Point;
29+
import android.os.Build;
2830
import android.os.Bundle;
2931
import android.util.DisplayMetrics;
32+
import android.view.Display;
3033
import android.view.LayoutInflater;
3134
import android.view.View;
3235
import android.view.ViewGroup;
36+
import android.view.WindowManager;
37+
3338
import processing.core.PApplet;
3439

3540
public class PFragment extends Fragment implements AppComponent {
36-
3741
private DisplayMetrics metrics;
42+
private Point size;
3843
private PApplet sketch;
3944

4045
public PFragment() {
4146
}
4247

4348
public void initDimensions() {
49+
/*
4450
metrics = new DisplayMetrics();
45-
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
51+
// getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
52+
WindowManager wm = getActivity().getWindowManager();
53+
Display display = wm.getDefaultDisplay();
54+
display.getRealMetrics(metrics);
55+
*/
56+
57+
// metrics = new DisplayMetrics();
58+
// getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
59+
// display.getRealMetrics(metrics); // API 17 or higher
60+
// display.getRealSize(size);
61+
62+
// display.getMetrics(metrics);
63+
64+
size = new Point();
65+
WindowManager wm = getActivity().getWindowManager();
66+
Display display = wm.getDefaultDisplay();
67+
if (Build.VERSION.SDK_INT >= 17) {
68+
display.getRealSize(size);
69+
} else if (Build.VERSION.SDK_INT >= 14) {
70+
// Use undocumented methods getRawWidth, getRawHeight
71+
try {
72+
size.x = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
73+
size.y = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
74+
} catch (Exception e) {
75+
display.getSize(size);
76+
}
77+
}
4678
}
4779

4880
public int getWidth() {
49-
return metrics.widthPixels;
81+
return size.x;
82+
// return metrics.widthPixels;
5083
}
5184

5285
public int getHeight() {
53-
return metrics.heightPixels;
86+
return size.y;
87+
// return metrics.heightPixels;
5488
}
5589

5690
public int getKind() {

core/src/processing/android/PWallpaper.java

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,40 +29,59 @@
2929
import android.view.WindowManager;
3030
import processing.core.PApplet;
3131
import android.util.Log;
32+
import android.os.Build;
33+
import android.view.WindowManager;
34+
import android.view.Display;
35+
import android.graphics.Point;
3236

3337
public class PWallpaper extends WallpaperService implements AppComponent {
3438
String TAG = "PWallpaper";
3539

40+
private Point size;
3641
private DisplayMetrics metrics;
37-
// private PApplet deadSketch = null;
38-
// private PApplet sketch = null;
3942
private PEngine engine;
4043

41-
// private final Handler handler = new Handler();
42-
4344
public PWallpaper() {
4445
}
4546

4647
public PWallpaper(PApplet sketch) {
4748
}
4849

4950
public void initDimensions() {
50-
metrics = new DisplayMetrics();
51+
// metrics = new DisplayMetrics();
5152
// getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
52-
WindowManager man = (WindowManager) getSystemService(WINDOW_SERVICE);
53-
man.getDefaultDisplay().getMetrics(metrics);
53+
// display.getRealMetrics(metrics); // API 17 or higher
54+
// display.getRealSize(size);
55+
// display.getMetrics(metrics);
56+
57+
size = new Point();
58+
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
59+
Display display = wm.getDefaultDisplay();
60+
if (Build.VERSION.SDK_INT >= 17) {
61+
display.getRealSize(size);
62+
} else if (Build.VERSION.SDK_INT >= 14) {
63+
// Use undocumented methods getRawWidth, getRawHeight
64+
try {
65+
size.x = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
66+
size.y = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
67+
} catch (Exception e) {
68+
display.getSize(size);
69+
}
70+
}
5471
}
5572

5673
public int getKind() {
5774
return WALLPAPER;
5875
}
5976

6077
public int getWidth() {
61-
return metrics.widthPixels;
78+
return size.x;
79+
// return metrics.widthPixels;
6280
}
6381

6482
public int getHeight() {
65-
return metrics.heightPixels;
83+
return size.y;
84+
// return metrics.heightPixels;
6685
}
6786

6887
public void setSketch(PApplet sketch) {
@@ -149,8 +168,8 @@ public void onTouchEvent(MotionEvent event) {
149168
@Override
150169
public void onOffsetsChanged(float xOffset, float yOffset,
151170
float xStep, float yStep, int xPixels, int yPixels) {
152-
// mOffset = xOffset;
153-
// drawFrame();
171+
sketch.offsetX = xOffset;
172+
sketch.offsetY = yOffset;
154173
}
155174

156175
@Override

core/src/processing/android/PWatchFaceCanvas.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,15 @@
2424

2525
import android.content.Intent;
2626
import android.graphics.Canvas;
27+
import android.graphics.Point;
28+
import android.os.Build;
2729
import android.os.Bundle;
2830
import android.graphics.Rect;
2931
import android.support.wearable.watchface.CanvasWatchFaceService;
3032
import android.support.wearable.watchface.WatchFaceService;
3133
import android.support.wearable.watchface.WatchFaceStyle;
3234
import android.util.DisplayMetrics;
35+
import android.view.Display;
3336
import android.view.MotionEvent;
3437
import android.view.SurfaceHolder;
3538
import android.view.WindowInsets;
@@ -40,22 +43,42 @@
4043

4144

4245
public class PWatchFaceCanvas extends CanvasWatchFaceService implements AppComponent {
46+
private Point size;
4347
private DisplayMetrics metrics;
4448
private PApplet sketch;
4549
private CEngine engine;
4650

4751
public void initDimensions() {
48-
metrics = new DisplayMetrics();
49-
WindowManager man = (WindowManager) getSystemService(WINDOW_SERVICE);
50-
man.getDefaultDisplay().getMetrics(metrics);
52+
// metrics = new DisplayMetrics();
53+
// WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
54+
// Display display = wm.getDefaultDisplay();
55+
// display.getRealMetrics(metrics); // only API level 17 o higher
56+
// display.getMetrics(metrics);
57+
58+
size = new Point();
59+
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
60+
Display display = wm.getDefaultDisplay();
61+
if (Build.VERSION.SDK_INT >= 17) {
62+
display.getRealSize(size);
63+
} else if (Build.VERSION.SDK_INT >= 14) {
64+
// Use undocumented methods getRawWidth, getRawHeight
65+
try {
66+
size.x = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
67+
size.y = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
68+
} catch (Exception e) {
69+
display.getSize(size);
70+
}
71+
}
5172
}
5273

5374
public int getWidth() {
54-
return metrics.widthPixels;
75+
return size.x;
76+
// return metrics.widthPixels;
5577
}
5678

5779
public int getHeight() {
58-
return metrics.heightPixels;
80+
return size.y;
81+
// return metrics.heightPixels;
5982
}
6083

6184
public int getKind() {

core/src/processing/android/PWatchFaceGLES.java

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@
2323
package processing.android;
2424

2525
import android.content.Intent;
26+
import android.graphics.Point;
27+
import android.os.Build;
2628
import android.os.Bundle;
29+
import android.view.Display;
2730
import android.view.WindowInsets;
2831
import android.support.wearable.watchface.Gles2WatchFaceService;
2932
import android.support.wearable.watchface.WatchFaceService;
@@ -38,22 +41,41 @@
3841
import android.graphics.Rect;
3942

4043
public class PWatchFaceGLES extends Gles2WatchFaceService implements AppComponent {
44+
private Point size;
4145
private DisplayMetrics metrics;
4246
private PApplet sketch;
4347
private GLEngine engine;
4448

4549
public void initDimensions() {
46-
metrics = new DisplayMetrics();
47-
WindowManager man = (WindowManager) getSystemService(WINDOW_SERVICE);
48-
man.getDefaultDisplay().getMetrics(metrics);
50+
// metrics = new DisplayMetrics();
51+
// WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
52+
// Display display = wm.getDefaultDisplay();
53+
// display.getMetrics(metrics);
54+
55+
size = new Point();
56+
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
57+
Display display = wm.getDefaultDisplay();
58+
if (Build.VERSION.SDK_INT >= 17) {
59+
display.getRealSize(size);
60+
} else if (Build.VERSION.SDK_INT >= 14) {
61+
// Use undocumented methods getRawWidth, getRawHeight
62+
try {
63+
size.x = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
64+
size.y = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
65+
} catch (Exception e) {
66+
display.getSize(size);
67+
}
68+
}
4969
}
5070

5171
public int getWidth() {
52-
return metrics.widthPixels;
72+
return size.x;
73+
// return metrics.widthPixels;
5374
}
5475

5576
public int getHeight() {
56-
return metrics.heightPixels;
77+
return size.y;
78+
// return metrics.heightPixels;
5779
}
5880

5981
public int getKind() {

core/src/processing/core/PApplet.java

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -295,8 +295,11 @@ public class PApplet extends Object implements PConstants {
295295
public boolean lowBitAmbient = false;
296296
public boolean burnInProtection = false;
297297

298-
// protected boolean windowFocused = false;
299-
// protected boolean viewFocused = false;
298+
/**
299+
* Offset for wallpapers, when user swipes across home screens.
300+
*/
301+
public float offsetX = 0;
302+
public float offsetY = 0;
300303

301304
/**
302305
* true if the applet is online.
@@ -471,29 +474,25 @@ public PSurface getSurface() {
471474
public void initSurface(AppComponent component, SurfaceHolder holder) {
472475
if (DEBUG) println("onCreateView() happening here: " + Thread.currentThread().getName());
473476

477+
component.initDimensions();
478+
displayWidth = component.getWidth();
479+
displayHeight = component.getHeight();
474480
handleSettings();
481+
if (fullScreen) {
482+
// Setting the default height and width to be fullscreen
483+
width = displayWidth;
484+
height = displayHeight;
485+
}
475486

476487
String rendererName = sketchRenderer();
477-
// Dummy values for initialization, setSize() will be called later onSurfaceChanged()
478-
int sw = 0;
479-
int sh = 0;
480488
if (DEBUG) println("Renderer " + rendererName);
481-
g = makeGraphics(sw, sh, rendererName, true);
489+
g = makeGraphics(width, height, rendererName, true);
482490
if (DEBUG) println("Created renderer");
483491
surface = g.createSurface(component, holder);
484492
if (DEBUG) println("Created surface");
485493

486494
setFullScreenVisibility();
487495

488-
component.initDimensions();
489-
displayWidth = component.getWidth();
490-
displayHeight = component.getHeight();
491-
if (fullScreen) {
492-
// Setting the default height and width to be fullscreen
493-
width = displayWidth;
494-
height = displayHeight;
495-
}
496-
497496
// Now we now the right width/height size for the renderer
498497
g.setSize(width, height);
499498

@@ -1428,10 +1427,7 @@ protected PGraphics makeGraphics(int w, int h,
14281427

14291428
pg.setParent(this);
14301429
pg.setPrimary(primary);
1431-
if (0 < w && 0 < h) {
1432-
pg.setSize(width, height);
1433-
}
1434-
1430+
pg.setSize(w, h);
14351431
return pg;
14361432
}
14371433

0 commit comments

Comments
 (0)