diff --git a/.travis.yml b/.travis.yml index db831514..1253807e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,9 +9,7 @@ android: components: - tools - platform-tools - - build-tools-27.0.3 - - android-27 + - build-tools-28.0.3 + - android-28 - extra-android-m2repository -before_install: - - yes | sdkmanager "platforms;android-27" diff --git a/build.gradle b/build.gradle index 8d74693e..89ce46cd 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2013-2016 microG Project Team + * Copyright 2013-2019 microG Project Team * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,6 +15,7 @@ */ buildscript { + ext.kotlin_version = '1.3.21' repositories { jcenter() google() @@ -22,19 +23,20 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.1.3' classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } allprojects { apply plugin: 'idea' - ext.androidBuildVersionTools = "27.0.3" + ext.androidBuildVersionTools = "28.0.3" } -def androidCompileSdk() { return 27 } +def androidCompileSdk() { return 28 } -def androidTargetSdk() { return 27 } +def androidTargetSdk() { return 28 } -def androidMinSdk() { return 9 } +def androidMinSdk() { return 14 } subprojects { repositories { diff --git a/play-services-basement/build.gradle b/play-services-basement/build.gradle index 2d5ef8c5..8f2a1ccc 100644 --- a/play-services-basement/build.gradle +++ b/play-services-basement/build.gradle @@ -15,6 +15,8 @@ */ apply plugin: 'com.android.library' +apply plugin: 'kotlin-android-extensions' +apply plugin: 'kotlin-android' String getMyVersionName() { def stdout = new ByteArrayOutputStream() @@ -43,6 +45,10 @@ android { targetSdkVersion androidTargetSdk() } + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 @@ -52,4 +58,5 @@ android { dependencies { api 'com.android.support:support-v4:25.3.1' api 'org.microg:safe-parcel:1.5.0' + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" } diff --git a/play-services-basement/src/main/java/com/google/android/gms/dynamic/ObjectWrapper.java b/play-services-basement/src/main/java/com/google/android/gms/dynamic/ObjectWrapper.java index 0c85d980..310804e7 100644 --- a/play-services-basement/src/main/java/com/google/android/gms/dynamic/ObjectWrapper.java +++ b/play-services-basement/src/main/java/com/google/android/gms/dynamic/ObjectWrapper.java @@ -17,6 +17,7 @@ package com.google.android.gms.dynamic; import android.os.IBinder; +import android.support.annotation.Nullable; import java.lang.reflect.Field; @@ -27,6 +28,7 @@ public class ObjectWrapper extends IObjectWrapper.Stub { this.t = t; } + @Nullable public static Object unwrap(IObjectWrapper obj) { if (obj == null) { return null; @@ -43,8 +45,7 @@ public class ObjectWrapper extends IObjectWrapper.Stub { if (!field.isAccessible()) { field.setAccessible(true); try { - Object wrapped = field.get(binder); - return wrapped; + return field.get(binder); } catch (NullPointerException localNullPointerException) { throw new IllegalArgumentException("Binder object is null.", localNullPointerException); @@ -60,6 +61,15 @@ public class ObjectWrapper extends IObjectWrapper.Stub { } } + @Nullable + public static T unwrapTyped(IObjectWrapper obj, Class clazz) { + try { + return clazz.cast(unwrap(obj)); + } catch (ClassCastException e) { + return null; + } + } + public static ObjectWrapper wrap(T t) { return new ObjectWrapper(t); } diff --git a/play-services-basement/src/main/kotlin/com/google/android/gms/dynamic/ObjectWrapper.kt b/play-services-basement/src/main/kotlin/com/google/android/gms/dynamic/ObjectWrapper.kt new file mode 100644 index 00000000..06c131ab --- /dev/null +++ b/play-services-basement/src/main/kotlin/com/google/android/gms/dynamic/ObjectWrapper.kt @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2019 microG Project Team + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.microg.gms.kotlin + +import com.google.android.gms.dynamic.IObjectWrapper +import com.google.android.gms.dynamic.ObjectWrapper + +inline fun IObjectWrapper?.unwrap(): T? = ObjectWrapper.unwrapTyped(this, T::class.java)