diff --git a/.travis.yml b/.travis.yml
index 2b005272deff1365f461ccbc434b8fe588b08732..02f9e12f20c50c0b5ca12f2489825382f25f1adc 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,26 +1,15 @@
-language: android
-sudo: false
-git:
- submodules: false
-before_install:
- - git submodule update --init --recursive
+language: java
+jdk: openjdk8
+install:
+ - mkdir $HOME/android-cmdline-tools
+ - curl https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip > $HOME/android-cmdline-tools/cmdline-tools.zip
+ - unzip -qq -n $HOME/android-cmdline-tools/cmdline-tools.zip -d $HOME/android-cmdline-tools
+ - echo y | $HOME/android-cmdline-tools/tools/bin/sdkmanager --sdk_root=$HOME/android-sdk 'platform-tools'
+ - echo y | $HOME/android-cmdline-tools/tools/bin/sdkmanager --sdk_root=$HOME/android-sdk 'build-tools;29.0.3'
+ - echo y | $HOME/android-cmdline-tools/tools/bin/sdkmanager --sdk_root=$HOME/android-sdk 'platforms;android-30'
+env:
+ - ANDROID_HOME=$HOME/android-sdk TERM=dumb JAVA_OPTS="-Xmx2048m"
before_script:
- echo sdk.dir $ANDROID_HOME > local.properties
script:
- - jdk_switcher use oraclejdk8
- - export TERM=dumb
- - export JAVA_OPTS="-XX:MaxPermSize=1024m -XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError -Xmx2048m"
- - ./gradlew build
-android:
- components:
- - tools
- - platform-tools
- - build-tools-24.0.3
- - android-24
- - extra-android-m2repository
-before_cache:
- - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
-cache:
- directories:
- - $HOME/.gradle/caches/
- - $HOME/.gradle/wrapper/
+ - ./gradlew --no-daemon build
diff --git a/build.gradle b/build.gradle
index 3ec4bfcef01f269a5ea018ee2e05d4a72373d09e..d5dcb5f83ee14aaecc6860c9a668074dd98e8f9f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -15,22 +15,23 @@
*/
buildscript {
+ ext.kotlin_version = '1.6.21'
repositories {
jcenter()
+ google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.2.2'
- classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
+ classpath 'com.android.tools.build:gradle:3.6.3'
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
apply plugin: 'idea'
- ext.androidBuildVersionTools = "24.0.3"
- ext.isReleaseVersion = false
+ ext.androidBuildVersionTools = "29.0.3"
}
-def androidCompileSdk() { return 24 }
+def androidCompileSdk() { return 30 }
def androidTargetSdk() { return 24 }
@@ -55,11 +56,7 @@ subprojects {
group = 'org.microg'
repositories {
jcenter()
- }
-
- tasks.withType(JavaCompile) {
- sourceCompatibility = JavaVersion.VERSION_1_7
- targetCompatibility = JavaVersion.VERSION_1_7
+ google()
}
}
diff --git a/fake-store/build.gradle b/fake-store/build.gradle
index 7f3ba8fa251c8a73aa439b30d9c5ec8236877dce..dc59f5dad279d86cc63f1e767ce60359137f01c6 100644
--- a/fake-store/build.gradle
+++ b/fake-store/build.gradle
@@ -15,6 +15,7 @@
*/
apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android'
String getMyVersionName() {
def stdout = new ByteArrayOutputStream()
@@ -46,10 +47,17 @@ android {
}
compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_6
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
}
}
if (file('user.gradle').exists()) {
apply from: 'user.gradle'
}
+repositories {
+ mavenCentral()
+}
+dependencies {
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+}
diff --git a/fake-store/src/main/AndroidManifest.xml b/fake-store/src/main/AndroidManifest.xml
index 428bdc4839be35c942daafe257f01caaecd5b539..53e5f84df7a75e9e87dea391dc9f6985de252370 100644
--- a/fake-store/src/main/AndroidManifest.xml
+++ b/fake-store/src/main/AndroidManifest.xml
@@ -18,12 +18,10 @@
-
-
+
+ android:theme="@style/Theme.Dialog.NoActionBar"/>
@@ -41,5 +39,12 @@
+
+
+
+
+
+
diff --git a/fake-store/src/main/aidl/com/android/vending/billing/IInAppBillingService.aidl b/fake-store/src/main/aidl/com/android/vending/billing/IInAppBillingService.aidl
index 0092998ad03a8ed1974bb680beb048ced41174d5..ea72c81f9cce11edfa6ebd3c2a2a335f375d93d8 100644
--- a/fake-store/src/main/aidl/com/android/vending/billing/IInAppBillingService.aidl
+++ b/fake-store/src/main/aidl/com/android/vending/billing/IInAppBillingService.aidl
@@ -53,7 +53,7 @@ interface IInAppBillingService {
* and "subs" for subscriptions)
* @return RESULT_OK(0) on success and appropriate response code on failures.
*/
- int isBillingSupported(int apiVersion, String packageName, String type);
+ int isBillingSupported(int apiVersion, String packageName, String type) = 0;
/**
* Provides details of a list of SKUs
@@ -78,7 +78,7 @@ interface IInAppBillingService {
* "title : "Example Title",
* "description" : "This is an example description" }'
*/
- Bundle getSkuDetails(int apiVersion, String packageName, String type, in Bundle skusBundle);
+ Bundle getSkuDetails(int apiVersion, String packageName, String type, in Bundle skusBundle) = 1;
/**
* Returns a pending intent to launch the purchase flow for an in-app item by providing a SKU,
@@ -111,7 +111,7 @@ interface IInAppBillingService {
* TODO: change this to app-specific keys.
*/
Bundle getBuyIntent(int apiVersion, String packageName, String sku, String type,
- String developerPayload);
+ String developerPayload) = 2;
/**
* Returns the current SKUs owned by the user of the type and package name specified along with
@@ -137,7 +137,7 @@ interface IInAppBillingService {
* next set of in-app purchases. Only set if the
* user has more owned skus than the current list.
*/
- Bundle getPurchases(int apiVersion, String packageName, String type, String continuationToken);
+ Bundle getPurchases(int apiVersion, String packageName, String type, String continuationToken) = 3;
/**
* Consume the last purchase of the given SKU. This will result in this item being removed
@@ -148,12 +148,7 @@ interface IInAppBillingService {
* to be consumed
* @return RESULT_OK(0) if consumption succeeded, appropriate response codes on failures.
*/
- int consumePurchase(int apiVersion, String packageName, String purchaseToken);
-
- /**
- * This API is currently under development.
- */
- int stub(int apiVersion, String packageName, String type);
+ int consumePurchase(int apiVersion, String packageName, String purchaseToken) = 4;
/**
* Returns a pending intent to launch the purchase flow for upgrading or downgrading a
@@ -188,5 +183,21 @@ interface IInAppBillingService {
* TODO: change this to app-specific keys.
*/
Bundle getBuyIntentToReplaceSkus(int apiVersion, String packageName,
- in List oldSkus, String newSku, String type, String developerPayload);
+ in List oldSkus, String newSku, String type, String developerPayload) = 6;
+
+ Bundle getBuyIntentV6(int apiVersion, String packageName, String sku, String type, String developerPayload, in Bundle extras) = 7;
+
+ Bundle getPurchasesV6(int apiVersion, String packageName, String type, String continuationToken, in Bundle extras) = 8;
+
+ int isBillingSupportedV7(int apiVersion, String packageName, String type, in Bundle extras) = 9;
+
+ Bundle getPurchasesV9(int apiVersion, String packageName, String type, String continuationToken, in Bundle extras) = 10;
+
+ Bundle consumePurchaseV9(int apiVersion, String packageName, String purchaseToken, in Bundle extras) = 11;
+
+ Bundle getPriceChangeConfirmationIntent(int apiVersion, String packageName, String sku, String type, in Bundle extras) = 800;
+
+ Bundle getSkuDetailsV10(int apiVersion, String packageName, String type, in Bundle skuBundle, in Bundle extras) = 900;
+
+ Bundle acknowledgePurchase(int apiVersion, String packageName, String purchaseToken, in Bundle extras) = 901;
}
diff --git a/fake-store/src/main/aidl/com/google/android/play/core/splitinstall/protocol/ISplitInstallService.aidl b/fake-store/src/main/aidl/com/google/android/play/core/splitinstall/protocol/ISplitInstallService.aidl
new file mode 100644
index 0000000000000000000000000000000000000000..31a0df922023e8ba501659957f9698558a4c39ed
--- /dev/null
+++ b/fake-store/src/main/aidl/com/google/android/play/core/splitinstall/protocol/ISplitInstallService.aidl
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2013-2022 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 com.google.android.play.core.splitinstall.protocol;
+
+import com.google.android.play.core.splitinstall.protocol.ISplitInstallServiceCallback;
+
+interface ISplitInstallService {
+
+ // Method not identified yet
+ void a();
+
+ void startInstall(String str, in List list, in Bundle bundle, in ISplitInstallServiceCallback callback);
+
+ // Method not identified yet
+ void c(String str);
+
+ // Method not identified yet
+ void d(String str);
+
+ // Method not identified yet
+ void e(String str);
+
+ void getSessionStates(String str, in ISplitInstallServiceCallback callback);
+
+ // Method not identified yet
+ void g(String str);
+
+ // Method not identified yet
+ void h(String str, in ISplitInstallServiceCallback callback);
+
+ // Method not identified yet
+ void i(String str);
+
+ // Method not identified yet
+ void j(String str);
+
+ // Method not identified yet
+ void k(String str);
+
+ // Method not identified yet
+ void l(String str);
+
+ // Method not identified yet
+ void m(String str);
+}
\ No newline at end of file
diff --git a/fake-store/src/main/aidl/com/google/android/play/core/splitinstall/protocol/ISplitInstallServiceCallback.aidl b/fake-store/src/main/aidl/com/google/android/play/core/splitinstall/protocol/ISplitInstallServiceCallback.aidl
new file mode 100644
index 0000000000000000000000000000000000000000..18b8657ca5e3cccf5b067dc65f7ac649d07a3992
--- /dev/null
+++ b/fake-store/src/main/aidl/com/google/android/play/core/splitinstall/protocol/ISplitInstallServiceCallback.aidl
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2013-2022 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 com.google.android.play.core.splitinstall.protocol;
+
+import android.os.Bundle;
+
+interface ISplitInstallServiceCallback {
+
+ void onStartInstall(int i, in Bundle bundle);
+
+ // Method not identified yet
+ void b();
+
+ void onCompleteInstall(int i);
+
+ void onCancelInstall(int i, in Bundle bundle);
+
+ void onGetSession(int i, in Bundle bundle);
+
+ void onError(in Bundle bundle);
+
+ void onGetSessionStates(in List list);
+
+ void onDeferredUninstall(in Bundle bundle);
+
+ void onDeferredInstall(in Bundle bundle);
+
+ void onGetSplitsForAppUpdate();
+
+ void onCompleteInstallForAppUpdate();
+
+ void onDeferredLanguageInstall();
+}
\ No newline at end of file
diff --git a/fake-store/src/main/java/com/android/vending/SplitInstallService.kt b/fake-store/src/main/java/com/android/vending/SplitInstallService.kt
new file mode 100644
index 0000000000000000000000000000000000000000..a70ec77636a4e6e1686e2fd78b2cac7027326324
--- /dev/null
+++ b/fake-store/src/main/java/com/android/vending/SplitInstallService.kt
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2013-2022 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 com.android.vending
+
+import android.app.Service
+import android.content.Intent
+import android.os.Bundle
+import android.os.IBinder
+import android.util.Log
+import com.android.vending.splitinstall.SplitInstallErrorCode
+import com.google.android.play.core.splitinstall.protocol.ISplitInstallService
+import com.google.android.play.core.splitinstall.protocol.ISplitInstallServiceCallback
+
+class SplitInstallService : Service() {
+
+ companion object {
+ const val TAG = "SplitInstallService"
+ const val ERROR_CODE_KEY = "error_code"
+ }
+
+ override fun onBind(p0: Intent?): IBinder {
+ Log.i(TAG, "service bound")
+ return mServiceInterface
+ }
+
+ private val mServiceInterface = object : ISplitInstallService.Stub() {
+
+ override fun a() {
+ Log.d(TAG, "a")
+ }
+
+ private fun logBundle(bundle: Bundle) {
+ for (key in bundle.keySet()) {
+ Log.d(TAG, "$key : ${bundle.get(key)}")
+ }
+ }
+
+ override fun startInstall(
+ packageName: String,
+ list: List,
+ bundle: Bundle,
+ callback: ISplitInstallServiceCallback
+ ) {
+ Log.i(TAG, "Start install request from $packageName")
+
+ for (element in list) {
+ logBundle(element)
+ }
+
+ logBundle(bundle)
+
+ val errorBundle = Bundle()
+ errorBundle.putInt(ERROR_CODE_KEY, SplitInstallErrorCode.API_NOT_AVAILABLE)
+ callback.onError(errorBundle)
+ }
+
+ override fun c(str: String?) {
+ Log.d(TAG, "c")
+ }
+
+ override fun d(str: String?) {
+ Log.d(TAG, "d")
+ }
+
+ override fun e(str: String?) {
+ Log.d(TAG, "e")
+ }
+
+ override fun getSessionStates(str: String, callback: ISplitInstallServiceCallback) {
+ callback.onGetSessionStates(arrayListOf())
+ }
+
+ override fun g(str: String?) {
+ Log.d(TAG, "g")
+ }
+
+ override fun h(str: String?, callback: ISplitInstallServiceCallback?) {
+ Log.d(TAG, "h $str $callback")
+ }
+
+ override fun i(str: String?) {
+ Log.d(TAG, "i")
+ }
+
+ override fun j(str: String?) {
+ Log.d(TAG, "j")
+ }
+
+ override fun k(str: String?) {
+ Log.d(TAG, "k")
+ }
+
+ override fun l(str: String?) {
+ Log.d(TAG, "l")
+ }
+
+ override fun m(str: String?) {
+ Log.d(TAG, "m")
+ }
+ }
+}
diff --git a/fake-store/src/main/java/com/android/vending/billing/InAppBillingService.java b/fake-store/src/main/java/com/android/vending/billing/InAppBillingService.java
index 74d8a33845e138c42c2db1d847cbd9f6a02d7924..e05e4e185c1eea64ae64aa03fd2d9fe58ccb0fcd 100644
--- a/fake-store/src/main/java/com/android/vending/billing/InAppBillingService.java
+++ b/fake-store/src/main/java/com/android/vending/billing/InAppBillingService.java
@@ -4,6 +4,7 @@ import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
+import android.os.Parcel;
import android.os.RemoteException;
import android.util.Log;
@@ -14,34 +15,64 @@ import java.util.List;
* Created by andrew.zhao on 9/19/16.
*/
public class InAppBillingService extends Service {
+ private static final String TAG = "FakeInAppStore";
private final IInAppBillingService.Stub mInAppBillingService = new IInAppBillingService.Stub() {
@Override
public int isBillingSupported(int apiVersion, String packageName, String type) throws RemoteException {
- Log.e("fakestore", "issupported");
- return 0;
+ return isBillingSupportedV7(apiVersion, packageName, type, new Bundle());
}
@Override
public Bundle getSkuDetails(int apiVersion, String packageName, String type, Bundle skusBundle) throws RemoteException {
- Log.e("fakestore", "getsku");
+ return getSkuDetailsV10(apiVersion, packageName, type, skusBundle, new Bundle());
+ }
+
+ @Override
+ public Bundle getBuyIntent(int apiVersion, String packageName, String sku, String type, String developerPayload) throws RemoteException {
+ return getBuyIntentV6(apiVersion, packageName, sku, type, developerPayload, new Bundle());
+ }
+
+ @Override
+ public Bundle getPurchases(int apiVersion, String packageName, String type, String continuationToken) throws RemoteException {
+ return getPurchasesV6(apiVersion, packageName, type, continuationToken, new Bundle());
+ }
+
+ @Override
+ public int consumePurchase(int apiVersion, String packageName, String purchaseToken) throws RemoteException {
+ return consumePurchaseV9(apiVersion, packageName, purchaseToken, new Bundle()).getInt("RESPONSE_CODE", 8);
+ }
+
+ @Override
+ public Bundle getBuyIntentToReplaceSkus(int apiVersion, String packageName, List oldSkus, String newSku, String type, String developerPayload) throws RemoteException {
+ Log.d(TAG, "getBuyIntentToReplaceSkus(" + apiVersion + ", " + packageName + ", " + newSku + ", " + type + ", " + developerPayload + ")");
Bundle data = new Bundle();
- data.putInt("RESPONSE_CODE", 0);
- data.putStringArrayList("DETAILS_LIST", new ArrayList());
+ data.putInt("RESPONSE_CODE", 4);
return data;
}
@Override
- public Bundle getBuyIntent(int apiVersion, String packageName, String sku, String type, String developerPayload) throws RemoteException {
- Log.e("fakestore", "getbuy");
+ public Bundle getBuyIntentV6(int apiVersion, String packageName, String sku, String type, String developerPayload, Bundle extras) throws RemoteException {
+ Log.d(TAG, "getBuyIntent(" + apiVersion + ", " + packageName + ", " + sku + ", " + type + ", " + developerPayload + ")");
Bundle data = new Bundle();
data.putInt("RESPONSE_CODE", 4);
return data;
}
@Override
- public Bundle getPurchases(int apiVersion, String packageName, String type, String continuationToken) throws RemoteException {
- Log.e("fakestore", "getpurchase");
+ public Bundle getPurchasesV6(int apiVersion, String packageName, String type, String continuationToken, Bundle extras) throws RemoteException {
+ return getPurchasesV9(apiVersion, packageName, type, continuationToken, extras);
+ }
+
+ @Override
+ public int isBillingSupportedV7(int apiVersion, String packageName, String type, Bundle extras) throws RemoteException {
+ Log.d(TAG, "isBillingSupported(" + apiVersion + ", " + packageName + ", " + type + ")");
+ return 0;
+ }
+
+ @Override
+ public Bundle getPurchasesV9(int apiVersion, String packageName, String type, String continuationToken, Bundle extras) throws RemoteException {
+ Log.d(TAG, "getPurchases(" + apiVersion + ", " + packageName + ", " + type + ", " + continuationToken + ")");
Bundle data = new Bundle();
data.putInt("RESPONSE_CODE", 0);
data.putStringArrayList("INAPP_PURCHASE_ITEM_LIST", new ArrayList());
@@ -51,24 +82,44 @@ public class InAppBillingService extends Service {
}
@Override
- public int consumePurchase(int apiVersion, String packageName, String purchaseToken) throws RemoteException {
- Log.e("fakestore", "consumepurchase");
- return 8;
+ public Bundle consumePurchaseV9(int apiVersion, String packageName, String purchaseToken, Bundle extras) throws RemoteException {
+ Log.d(TAG, "consumePurchase(" + apiVersion + ", " + packageName + ", " + purchaseToken + ")");
+ Bundle data = new Bundle();
+ data.putInt("RESPONSE_CODE", 8);
+ return data;
}
@Override
- public int stub(int apiVersion, String packageName, String type) throws RemoteException {
- Log.e("fakestore", "stub");
- return 0;
+ public Bundle getPriceChangeConfirmationIntent(int apiVersion, String packageName, String sku, String type, Bundle extras) throws RemoteException {
+ Log.d(TAG, "getPriceChangeConfirmationIntent(" + apiVersion + ", " + packageName + ", " + sku + ", " + type + ")");
+ Bundle data = new Bundle();
+ data.putInt("RESPONSE_CODE", 4);
+ return data;
}
@Override
- public Bundle getBuyIntentToReplaceSkus(int apiVersion, String packageName, List oldSkus, String newSku, String type, String developerPayload) throws RemoteException {
- Log.e("fakestore", "getbuyintenttoreplace");
+ public Bundle getSkuDetailsV10(int apiVersion, String packageName, String type, Bundle skuBundle, Bundle extras) throws RemoteException {
+ Log.d(TAG, "getSkuDetails(" + apiVersion + ", " + packageName + ", " + type + ")");
Bundle data = new Bundle();
- data.putInt("RESPONSE_CODE", 4);
+ data.putInt("RESPONSE_CODE", 0);
+ data.putStringArrayList("DETAILS_LIST", new ArrayList());
+ return data;
+ }
+
+ @Override
+ public Bundle acknowledgePurchase(int apiVersion, String packageName, String purchaseToken, Bundle extras) throws RemoteException {
+ Log.d(TAG, "acknowledgePurchase(" + apiVersion + ", " + packageName + ", " + purchaseToken + ")");
+ Bundle data = new Bundle();
+ data.putInt("RESPONSE_CODE", 8);
return data;
}
+
+ @Override
+ public boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException {
+ if (super.onTransact(code, data, reply, flags)) return true;
+ Log.d(TAG, "onTransact [unknown]: " + code + ", " + data + ", " + flags);
+ return false;
+ }
};
public IBinder onBind(Intent intent) {
diff --git a/fake-store/src/main/java/com/android/vending/splitinstall/SplitInstallErrorCode.kt b/fake-store/src/main/java/com/android/vending/splitinstall/SplitInstallErrorCode.kt
new file mode 100644
index 0000000000000000000000000000000000000000..61a05d57f99166481f42faceb20cdda10cd799bd
--- /dev/null
+++ b/fake-store/src/main/java/com/android/vending/splitinstall/SplitInstallErrorCode.kt
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2013-2022 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 com.android.vending.splitinstall
+
+interface SplitInstallErrorCode {
+ companion object {
+ const val API_NOT_AVAILABLE = -5
+ }
+}
diff --git a/fake-store/src/main/res/values-v11/styles.xml b/fake-store/src/main/res/values-v11/styles.xml
new file mode 100644
index 0000000000000000000000000000000000000000..54e23b48f7c3680e5aef52e7e39de1f40b5db45b
--- /dev/null
+++ b/fake-store/src/main/res/values-v11/styles.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/fake-store/src/main/res/values/styles.xml b/fake-store/src/main/res/values/styles.xml
new file mode 100644
index 0000000000000000000000000000000000000000..adb2305d275dd3d4c3f0954ef38142275f4dc2f4
--- /dev/null
+++ b/fake-store/src/main/res/values/styles.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 8c0fb64a8698b08ecc4158d828ca593c4928e9dd..62d4c053550b91381bbd28b1afc82d634bf73a8a 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.jar.license b/gradle/wrapper/gradle-wrapper.jar.license
new file mode 100644
index 0000000000000000000000000000000000000000..c48920566b44e6864db0801a831ea33907cc40f1
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.jar.license
@@ -0,0 +1,2 @@
+Copyright 2015 the original author or authors.
+SPDX-License-Identifier: Apache-2.0
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 8b3fd0a11ebe85a3c70438d98ba43a9bd8000c60..e2993c8f1823de062101c99f45477f9f9dd72fac 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,8 @@
-#Fri Jan 30 12:07:36 CET 2015
+# SPDX-FileCopyrightText: 2015, microG Project Team
+# SPDX-License-Identifier: CC0-1.0
+
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip