diff --git a/.gitignore b/.gitignore index 3c5d4915e2f..01f330e3af1 100644 --- a/.gitignore +++ b/.gitignore @@ -8,10 +8,6 @@ /android-toolchains /target /tests/wpt/reftests-report/report.html -/ports/android/bin -/ports/android/libs -/ports/android/local.properties -/ports/android/obj /python/_virtualenv* /python/_venv* /python/tidy/servo_tidy.egg-info diff --git a/ports/jniapi/src/lib.rs b/ports/jniapi/src/lib.rs index a57d777afa3..8989c6cfbdc 100644 --- a/ports/jniapi/src/lib.rs +++ b/ports/jniapi/src/lib.rs @@ -73,7 +73,7 @@ pub extern "C" fn Java_org_mozilla_servoview_JNIServo_init( callbacks_obj: JObject, surface: JObject, ) { - let (mut opts, log, log_str, _gst_debug_str) = match get_options(&env, opts, surface) { + let (opts, log, log_str, _gst_debug_str) = match get_options(&env, opts, surface) { Ok((opts, log, log_str, gst_debug_str)) => (opts, log, log_str, gst_debug_str), Err(err) => { throw(&env, &err); @@ -875,6 +875,7 @@ fn get_options( let opts = InitOptions { args: args.unwrap_or(vec![]), + url, coordinates, density, xr_discovery: None, diff --git a/ports/jniapi/src/simpleservo.rs b/ports/jniapi/src/simpleservo.rs index b4129aa6eb0..d13fb2668ab 100644 --- a/ports/jniapi/src/simpleservo.rs +++ b/ports/jniapi/src/simpleservo.rs @@ -52,6 +52,7 @@ pub use servo::embedder_traits::EventLoopWaker; pub struct InitOptions { pub args: Vec, + pub url: Option, pub coordinates: Coordinates, pub density: f32, pub xr_discovery: Option, @@ -253,10 +254,11 @@ pub fn init( args.insert(0, "servo".to_string()); opts::from_cmdline_args(Options::new(), &args); + let embedder_url = init_opts.url.as_ref().and_then(|s| ServoUrl::parse(s).ok()); let pref_url = ServoUrl::parse(&pref!(shell.homepage)).ok(); let blank_url = ServoUrl::parse("about:blank").ok(); - let url = pref_url.or(blank_url).unwrap(); + let url = embedder_url.or(pref_url).or(blank_url).unwrap(); gl.clear_color(1.0, 1.0, 1.0, 1.0); gl.clear(gl::COLOR_BUFFER_BIT); diff --git a/support/android/apk/.gitignore b/support/android/apk/.gitignore index 4d87ae843a8..a63f9dccdf7 100644 --- a/support/android/apk/.gitignore +++ b/support/android/apk/.gitignore @@ -3,4 +3,5 @@ /gen/ /libs/ /local.properties +/obj/ /proguard-project.txt diff --git a/support/android/apk/build.gradle b/support/android/apk/build.gradle index 12f0318fb1c..d0fa332c488 100644 --- a/support/android/apk/build.gradle +++ b/support/android/apk/build.gradle @@ -25,8 +25,8 @@ ext.getJniLibsPath = { boolean debug, String arch -> ext.getRustTarget = { String arch -> switch (arch.toLowerCase()) { - case 'armv7' : return 'armv7-linux-androideabi' - case 'arm64' : return 'aarch64-linux-android' + case 'armv7': return 'armv7-linux-androideabi' + case 'arm64': return 'aarch64-linux-android' case 'x86': return 'i686-linux-android' case 'x64': return 'x86_64-linux-android' default: throw new GradleException("Invalid target architecture " + arch) @@ -35,8 +35,8 @@ ext.getRustTarget = { String arch -> ext.getNDKAbi = { String arch -> switch (arch.toLowerCase()) { - case 'armv7' : return 'armeabi-v7a' - case 'arm64' : return 'arm64-v8a' + case 'armv7': return 'armeabi-v7a' + case 'arm64': return 'arm64-v8a' case 'x86': return 'x86' case 'x64': return 'x86_64' default: throw new GradleException("Invalid target architecture " + arch) @@ -60,8 +60,8 @@ ext.getNdkDir = { -> def ndkDir = ndkRoot != null ? new File(ndkRoot) : null if (!ndkDir || !ndkDir.exists()) { - throw new GradleException("Please set a valid ANDROID_NDK_ROOT environment variable" + - "or ndk.dir path in local.properties file"); + throw new GradleException("Please set a valid ANDROID_NDK_ROOT environment variable " + + "or ndk.dir path in local.properties file") } return ndkDir.absolutePath } diff --git a/support/android/apk/servoapp/build.gradle b/support/android/apk/servoapp/build.gradle index 88f989bfdd8..c57660c2c03 100644 --- a/support/android/apk/servoapp/build.gradle +++ b/support/android/apk/servoapp/build.gradle @@ -7,7 +7,7 @@ import java.util.regex.Pattern android { compileSdk 33 - buildToolsVersion "33.0.2" + buildToolsVersion = "33.0.2" namespace 'org.mozilla.servo' @@ -27,7 +27,7 @@ android { } // Share all of that with servoview - flavorDimensions "default" + flavorDimensions = ["default"] productFlavors { basic { @@ -113,8 +113,8 @@ android { // Ignore default 'debug' and 'release' build types variantFilter { variant -> - if(variant.buildType.name.equals('release') || variant.buildType.name.equals('debug')) { - variant.setIgnore(true); + if(variant.buildType.name == 'release' || variant.buildType.name == 'debug') { + variant.setIgnore(true) } } diff --git a/support/android/apk/servoapp/src/main/AndroidManifest.xml b/support/android/apk/servoapp/src/main/AndroidManifest.xml index 3bedf50ffbf..3c7cdc11507 100644 --- a/support/android/apk/servoapp/src/main/AndroidManifest.xml +++ b/support/android/apk/servoapp/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - @@ -12,8 +11,8 @@ + android:configChanges="density|keyboardHidden|navigation|orientation|screenSize|uiMode" + android:exported="true"> @@ -45,4 +44,3 @@ - diff --git a/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MainActivity.java b/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MainActivity.java index a366e8037d2..ccdfb1dcd9c 100644 --- a/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MainActivity.java +++ b/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MainActivity.java @@ -13,6 +13,7 @@ import android.net.Uri; import android.os.Bundle; import android.system.ErrnoException; import android.system.Os; +import android.util.Log; import android.view.View; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; @@ -21,11 +22,9 @@ import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.TextView; -import android.util.Log; -import org.mozilla.servo.MediaSession; -import org.mozilla.servoview.ServoView; import org.mozilla.servoview.Servo; +import org.mozilla.servoview.ServoView; import java.io.File; @@ -65,16 +64,15 @@ public class MainActivity extends Activity implements Servo.Client { mServoView.setClient(this); mServoView.requestFocus(); - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { - File sdcard = getExternalFilesDir(""); - String host = sdcard.toPath().resolve("android_hosts").toString(); - try { + File sdcard = getExternalFilesDir(""); + String host = sdcard.toPath().resolve("android_hosts").toString(); + try { Os.setenv("HOST_FILE", host, false); - } catch (ErrnoException e) { + } catch (ErrnoException e) { e.printStackTrace(); - } } + Intent intent = getIntent(); String args = intent.getStringExtra("servoargs"); String log = intent.getStringExtra("servolog"); @@ -253,7 +251,6 @@ public class MainActivity extends Activity implements Servo.Client { if (state == MediaSession.PLAYBACK_STATE_PLAYING || state == MediaSession.PLAYBACK_STATE_PAUSED) { mMediaSession.showMediaSessionControls(); - return; } } @@ -265,6 +262,5 @@ public class MainActivity extends Activity implements Servo.Client { } mMediaSession.setPositionState(duration, position, playbackRate); - return; } } diff --git a/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MediaSession.java b/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MediaSession.java index bb9f874b463..a5a263a1912 100644 --- a/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MediaSession.java +++ b/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MediaSession.java @@ -5,7 +5,6 @@ package org.mozilla.servo; -import android.app.Activity; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; @@ -124,7 +123,7 @@ public class MediaSession { mContext.registerReceiver(mMediaSessionActionReceiver, filter); - Notification.Builder builder = new Notification.Builder(mContext, this.MEDIA_CHANNEL_ID); + Notification.Builder builder = new Notification.Builder(mContext, MEDIA_CHANNEL_ID); builder .setSmallIcon(R.drawable.media_session_icon) .setContentTitle(mTitle) diff --git a/support/android/apk/servoview/build.gradle b/support/android/apk/servoview/build.gradle index f0511735fc5..8332d8f3272 100644 --- a/support/android/apk/servoview/build.gradle +++ b/support/android/apk/servoview/build.gradle @@ -8,7 +8,7 @@ import java.util.regex.Pattern android { compileSdk 33 - buildToolsVersion "33.0.2" + buildToolsVersion = "33.0.2" namespace 'org.mozilla.servoview' @@ -28,7 +28,7 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } - flavorDimensions "default" + flavorDimensions = ["default"] productFlavors { basic { @@ -115,8 +115,8 @@ android { // Ignore default 'debug' and 'release' build types variantFilter { variant -> - if(variant.buildType.name.equals('release') || variant.buildType.name.equals('debug')) { - variant.setIgnore(true); + if(variant.buildType.name == 'release' || variant.buildType.name == 'debug') { + variant.setIgnore(true) } } @@ -140,7 +140,7 @@ android { tasks.all { compileTask -> // This matches the task `mergeBasicArmv7DebugJniLibFolders`. - Pattern pattern = Pattern.compile(/^merge[A-Z][\w\d]+([A-Z][\w\d]+)(Debug|Release)JniLibFolders/) + Pattern pattern = Pattern.compile(/^merge[A-Z]\w+([A-Z]\w+)(Debug|Release)JniLibFolders/) Matcher matcher = pattern.matcher(compileTask.name) if (!matcher.find()) { return @@ -217,7 +217,7 @@ dependencies { // folderFilter can be used to improve search performance static String findDependencyPath(String basePath, String filename, String folderFilter) { - File path = new File(basePath); + File path = new File(basePath) if (!path.exists()) { return '' } @@ -231,7 +231,7 @@ static String findDependencyPath(String basePath, String filename, String folder } def result = '' path.eachFileRecurse(FileType.FILES) { - if(it.name.equals(filename)) { + if(it.name == filename) { result = it.absolutePath } } @@ -241,9 +241,9 @@ static String findDependencyPath(String basePath, String filename, String folder class ServoDependency { ServoDependency(String fileName, String folderFilter = null) { - this.fileName = fileName; - this.folderFilter = folderFilter; + this.fileName = fileName + this.folderFilter = folderFilter } - public String fileName; - public String folderFilter; + public String fileName + public String folderFilter } diff --git a/support/android/apk/servoview/src/main/java/org/mozilla/servoview/Servo.java b/support/android/apk/servoview/src/main/java/org/mozilla/servoview/Servo.java index e8dfd332a11..322bcaa39e6 100644 --- a/support/android/apk/servoview/src/main/java/org/mozilla/servoview/Servo.java +++ b/support/android/apk/servoview/src/main/java/org/mozilla/servoview/Servo.java @@ -6,17 +6,14 @@ package org.mozilla.servoview; import android.app.Activity; -import android.content.Context; -import android.util.Log; import android.view.Surface; +import org.mozilla.servoview.JNIServo.ServoCoordinates; +import org.mozilla.servoview.JNIServo.ServoOptions; + import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; -import org.freedesktop.gstreamer.GStreamer; -import org.mozilla.servoview.JNIServo.ServoCoordinates; -import org.mozilla.servoview.JNIServo.ServoOptions; - public class Servo { private static final String LOGTAG = "Servo"; private JNIServo mJNI = new JNIServo(); @@ -38,9 +35,7 @@ public class Servo { mServoCallbacks = new Callbacks(client, gfxcb); - mRunCallback.inGLThread(() -> { - mJNI.init(activity, options, mServoCallbacks, surface); - }); + mRunCallback.inGLThread(() -> mJNI.init(activity, options, mServoCallbacks, surface)); } public void resetGfxCallbacks(GfxCallbacks gfxcb) { @@ -49,7 +44,7 @@ public class Servo { public void shutdown() { mShuttingDown = true; - FutureTask task = new FutureTask(new Callable() { + FutureTask task = new FutureTask<>(new Callable() { public Void call() throws Exception { mJNI.requestShutdown(); // Wait until Servo gets back to us to finalize shutdown. diff --git a/support/android/apk/servoview/src/main/java/org/mozilla/servoview/ServoView.java b/support/android/apk/servoview/src/main/java/org/mozilla/servoview/ServoView.java index 19343d134d7..1ab99a43756 100644 --- a/support/android/apk/servoview/src/main/java/org/mozilla/servoview/ServoView.java +++ b/support/android/apk/servoview/src/main/java/org/mozilla/servoview/ServoView.java @@ -27,6 +27,7 @@ import android.view.Choreographer; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.ScaleGestureDetector; +import android.view.View; import android.widget.OverScroller; import java.util.ArrayList; @@ -78,7 +79,7 @@ public class ServoView extends SurfaceView setFocusable(true); setFocusableInTouchMode(true); setClickable(true); - ArrayList view = new ArrayList(); + ArrayList view = new ArrayList<>(); view.add(this); addTouchables(view); setWillNotCacheDrawing(false); @@ -89,7 +90,6 @@ public class ServoView extends SurfaceView mGLThread.start(); } - public void setClient(Client client) { mClient = client; } @@ -99,7 +99,6 @@ public class ServoView extends SurfaceView mServoLog = log; } - // RunCallback public void inGLThread(Runnable r) { mGLLooperHandler.post(r); @@ -212,16 +211,12 @@ public class ServoView extends SurfaceView mServo.stop(); } - public void loadUri(String uri) { - if (mServo != null) { - mServo.loadUri(uri); - } else { - mInitialUri = uri; - } - } - public void loadUri(Uri uri) { - loadUri(uri.toString()); + if (mServo != null) { + mServo.loadUri(uri.toString()); + } else { + mInitialUri = uri.toString(); + } } public void scrollStart(int dx, int dy, int x, int y) { @@ -373,6 +368,7 @@ public class ServoView extends SurfaceView Surface surface = holder.getSurface(); ServoOptions options = new ServoOptions(); options.args = mServoView.mServoArgs; + options.url = mServoView.mInitialUri; options.coordinates = coords; options.enableLogs = true; options.enableSubpixelTextAntialiasing = true;