Skip to content
This repository was archived by the owner on Aug 12, 2022. It is now read-only.

Commit 1a5419f

Browse files
authored
Merge pull request #336 from LLK/release/2020-10-05
[MASTER] Release 2020-10-05
2 parents 72c8112 + c2d7be6 commit 1a5419f

File tree

4 files changed

+75
-48
lines changed

4 files changed

+75
-48
lines changed

android/ScratchJr/app/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ android {
2020
free {
2121
dimension = 'scratchjrversion'
2222
applicationId "org.scratchjr.androidfree"
23-
minSdkVersion 19
24-
targetSdkVersion 28
25-
versionCode 21
26-
versionName "1.2.0"
23+
minSdkVersion 21
24+
targetSdkVersion 29
25+
versionCode 22
26+
versionName "1.2.11"
2727
}
2828
}
2929
}

android/ScratchJr/app/src/main/java/org/scratchjr/android/ScratchJrActivity.java

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
import java.io.FileNotFoundException;
4141
import java.io.IOException;
4242
import java.io.InputStream;
43+
import java.util.Arrays;
44+
import java.util.Vector;
4345

4446
/**
4547
* Main activity for Scratch Jr., consisting of a full-screen landscape WebView.
@@ -103,6 +105,7 @@ public class ScratchJrActivity
103105
private final int SCRATCHJR_CAMERA_MIC_PERMISSION = 1;
104106
public int cameraPermissionResult = PackageManager.PERMISSION_DENIED;
105107
public int micPermissionResult = PackageManager.PERMISSION_DENIED;
108+
public int readExtPermissionResult = PackageManager.PERMISSION_DENIED;
106109

107110
/* Firebase analytics tracking */
108111
private FirebaseAnalytics _FirebaseAnalytics;
@@ -172,34 +175,33 @@ public void run() {
172175
requestPermissions();
173176
}
174177

175-
private void requestExtStoragePermissions() {
176-
int readExtPermissionResult = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
177-
if (readExtPermissionResult != PackageManager.PERMISSION_GRANTED) {
178-
int requestCode = 2;
179-
ActivityCompat.requestPermissions(this,
180-
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, requestCode);
181-
}
182-
}
183-
178+
/*
179+
Ask for all permissions when ScratchJr is first launched so that we are not asking a 5-7 year old to give permission
180+
*/
184181
public void requestPermissions() {
185-
requestExtStoragePermissions();
186182
cameraPermissionResult = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
187183
micPermissionResult = ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO);
184+
readExtPermissionResult = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
188185

189-
String[] desiredPermissions;
190-
if (cameraPermissionResult != PackageManager.PERMISSION_GRANTED
191-
&& micPermissionResult != PackageManager.PERMISSION_GRANTED) {
192-
desiredPermissions = new String[]{
193-
Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO
194-
};
195-
} else if (cameraPermissionResult != PackageManager.PERMISSION_GRANTED) {
196-
desiredPermissions = new String[]{Manifest.permission.CAMERA};
197-
} else if (micPermissionResult != PackageManager.PERMISSION_GRANTED) {
198-
desiredPermissions = new String[]{Manifest.permission.RECORD_AUDIO};
199-
} else {
186+
if (cameraPermissionResult == PackageManager.PERMISSION_GRANTED
187+
&& micPermissionResult == PackageManager.PERMISSION_GRANTED
188+
&& readExtPermissionResult == PackageManager.PERMISSION_GRANTED) {
200189
return;
201190
}
202191

192+
Vector<String> tmp = new Vector<String>(3);
193+
if (cameraPermissionResult != PackageManager.PERMISSION_GRANTED) {
194+
tmp.add(Manifest.permission.CAMERA);
195+
}
196+
if (micPermissionResult != PackageManager.PERMISSION_GRANTED) {
197+
tmp.add(Manifest.permission.RECORD_AUDIO);
198+
}
199+
if (readExtPermissionResult != PackageManager.PERMISSION_GRANTED) {
200+
tmp.add(Manifest.permission.READ_EXTERNAL_STORAGE);
201+
}
202+
Object[] tmpArray = tmp.toArray();
203+
String[] desiredPermissions = Arrays.copyOf(tmpArray, tmpArray.length, String[].class);
204+
203205
ActivityCompat.requestPermissions(this,
204206
desiredPermissions,
205207
SCRATCHJR_CAMERA_MIC_PERMISSION);
@@ -217,6 +219,9 @@ public void onRequestPermissionsResult(int requestCode,
217219
if (permission.equals(Manifest.permission.RECORD_AUDIO)) {
218220
micPermissionResult = grantResults[permissionId];
219221
}
222+
if (permission.equals(Manifest.permission.READ_EXTERNAL_STORAGE)) {
223+
readExtPermissionResult = grantResults[permissionId];
224+
}
220225
permissionId++;
221226
}
222227
}

ios/ScratchJr/src/ViewController.m

Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,49 @@ - (void) showSplash {
6666
[UIImage imageNamed:@"Default.png"],
6767
nil];
6868
[self.view addSubview:splashScreen];
69+
70+
// align splashScreen image to superview
71+
splashScreen.translatesAutoresizingMaskIntoConstraints = NO;
72+
// Trailing
73+
NSLayoutConstraint *trailing = [NSLayoutConstraint
74+
constraintWithItem:splashScreen
75+
attribute:NSLayoutAttributeTrailing
76+
relatedBy:NSLayoutRelationEqual
77+
toItem:self.view
78+
attribute:NSLayoutAttributeTrailing
79+
multiplier:1.0f
80+
constant:0.f];
81+
// Leading
82+
NSLayoutConstraint *leading = [NSLayoutConstraint
83+
constraintWithItem:splashScreen
84+
attribute:NSLayoutAttributeLeading
85+
relatedBy:NSLayoutRelationEqual
86+
toItem:self.view
87+
attribute:NSLayoutAttributeLeading
88+
multiplier:1.0f
89+
constant:0.f];
90+
// Top
91+
NSLayoutConstraint *top = [NSLayoutConstraint
92+
constraintWithItem:splashScreen
93+
attribute:NSLayoutAttributeTop
94+
relatedBy:NSLayoutRelationEqual
95+
toItem:self.view
96+
attribute:NSLayoutAttributeTop
97+
multiplier:1.0f
98+
constant:0.f];
99+
// Bottom
100+
NSLayoutConstraint *bottom = [NSLayoutConstraint
101+
constraintWithItem:splashScreen
102+
attribute:NSLayoutAttributeBottom
103+
relatedBy:NSLayoutRelationEqual
104+
toItem:self.view
105+
attribute:NSLayoutAttributeBottom
106+
multiplier:1.0f
107+
constant:0.f];
108+
[self.view addConstraint:leading];
109+
[self.view addConstraint:trailing];
110+
[self.view addConstraint:top];
111+
[self.view addConstraint:bottom];
69112
}
70113

71114
- (void)didReceiveMemoryWarning
@@ -118,27 +161,6 @@ - (void)viewDidAppear:(BOOL)animated{
118161
startDate = [NSDate date];
119162
}
120163

121-
// Disables iOS 9 webview touch tooltip by disabling the long-press gesture recognizer in subviews
122-
// Thanks to Rye:
123-
// http://stackoverflow.com/questions/32687368/how-to-completely-disable-magnifying-glass-for-uiwebview-ios9
124-
- (void) disableWebViewLongPressGestures:(WKWebView *)webview {
125-
for(id subView in webview.subviews) {
126-
if([subView isKindOfClass:[UIScrollView class]]) {
127-
UIScrollView *scrollView = (UIScrollView *)subView;
128-
for(id ssView in scrollView.subviews) {
129-
if([NSStringFromClass([ssView class]) isEqualToString:@"UIWebBrowserView"]) {
130-
for(UIGestureRecognizer *gs in [ssView gestureRecognizers]) {
131-
if ([gs isKindOfClass:[UILongPressGestureRecognizer class]])
132-
{
133-
gs.enabled = NO;
134-
}
135-
}
136-
}
137-
}
138-
}
139-
}
140-
}
141-
142164
- (void) receiveProject:(NSString *)project{
143165
NSString *callback = [NSString stringWithFormat:@"OS.loadProjectFromSjr('%@');", project];
144166
WKWebView *webview = [ViewController webview];
@@ -171,7 +193,7 @@ - (BOOL)prefersStatusBarHidden{
171193

172194
- (void) webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
173195
[webview evaluateJavaScript:@"window.tablet = window.webkit.messageHandlers.jsBridge" completionHandler:nil];
174-
[self disableWebViewLongPressGestures:webView];
196+
[webview evaluateJavaScript:@"document.body.style.webkitTouchCallout='none';" completionHandler:nil];
175197

176198
NSString *debugChoice =[[NSUserDefaults standardUserDefaults] stringForKey:@"debugstate"];
177199

src/editor/ui/Palette.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ export default class Palette {
498498
(sc.flowCaret.next != null) || (sc.flowCaret.inside != null))) {
499499
return 'scripts';
500500
}
501-
if (box2.overlapElemBy(box, 0.66) && box2.hitRect({x: el.left / scale, y: el.top / scale})) {
501+
if (box2.overlapElemBy(box, 0.4) && box2.hitRect({x: el.left / scale, y: el.top / scale})) {
502502
return 'palette';
503503
}
504504
if (pt && box2.hitRect(pt)) {

0 commit comments

Comments
 (0)