├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ ├── gradle-wrapper.jar.license
│ └── gradle-wrapper.properties
├── fake-store
├── src
│ └── main
│ │ ├── res
│ │ ├── mipmap-hdpi
│ │ │ ├── ic_app.png
│ │ │ └── ic_app_round.png
│ │ ├── mipmap-mdpi
│ │ │ ├── ic_app.png
│ │ │ └── ic_app_round.png
│ │ ├── mipmap-xhdpi
│ │ │ ├── ic_app.png
│ │ │ └── ic_app_round.png
│ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_app.png
│ │ │ └── ic_app_round.png
│ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_app.png
│ │ │ └── ic_app_round.png
│ │ ├── values-v26
│ │ │ └── ic_app_background.xml
│ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_app_round.xml
│ │ │ └── ic_app.xml
│ │ ├── values
│ │ │ ├── styles.xml
│ │ │ └── strings.xml
│ │ ├── values-v11
│ │ │ └── styles.xml
│ │ └── drawable-v26
│ │ │ ├── ic_app_foreground.xml
│ │ │ └── ic_app_foreground_mono.xml
│ │ ├── aidl
│ │ └── com
│ │ │ ├── google
│ │ │ └── android
│ │ │ │ └── finsky
│ │ │ │ └── externalreferrer
│ │ │ │ └── IGetInstallReferrerService.aidl
│ │ │ └── android
│ │ │ └── vending
│ │ │ ├── licensing
│ │ │ ├── ILicenseV2ResultListener.aidl
│ │ │ ├── ILicenseResultListener.aidl
│ │ │ └── ILicensingService.aidl
│ │ │ └── billing
│ │ │ └── IInAppBillingService.aidl
│ │ ├── java
│ │ ├── com
│ │ │ ├── android
│ │ │ │ └── vending
│ │ │ │ │ ├── GrantFakeSignaturePermissionActivity.java
│ │ │ │ │ ├── licensing
│ │ │ │ │ └── LicensingService.java
│ │ │ │ │ └── billing
│ │ │ │ │ └── InAppBillingService.java
│ │ │ └── google
│ │ │ │ └── android
│ │ │ │ └── finsky
│ │ │ │ └── externalreferrer
│ │ │ │ └── GetInstallReferrerService.java
│ │ └── org
│ │ │ └── microg
│ │ │ └── vending
│ │ │ └── ui
│ │ │ └── MainActivity.java
│ │ └── AndroidManifest.xml
└── build.gradle
├── settings.gradle
├── .gitignore
├── .reuse
└── dep5
├── .github
└── workflows
│ ├── reuse.yml
│ └── build.yml
├── fake-signature
├── src
│ └── main
│ │ ├── aidl
│ │ └── com
│ │ │ └── huawei
│ │ │ └── signature
│ │ │ └── diff
│ │ │ └── ISignatureService.aidl
│ │ ├── res
│ │ └── values
│ │ │ ├── arrays.xml
│ │ │ └── signature.xml
│ │ ├── java
│ │ └── com
│ │ │ └── huawei
│ │ │ └── signature
│ │ │ └── diff
│ │ │ ├── InitReceiver.java
│ │ │ ├── InitProvider.java
│ │ │ ├── AppListDatabaseOpenHelper.java
│ │ │ └── SignatureService.java
│ │ └── AndroidManifest.xml
└── build.gradle
├── README.md
├── gradlew.bat
├── LICENSES
├── CC0-1.0.txt
├── Apache-2.0.txt
└── CC-BY-SA-4.0.txt
└── gradlew
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microg/FakeStore/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar.license:
--------------------------------------------------------------------------------
1 | Copyright 2015 the original author or authors.
2 | SPDX-License-Identifier: Apache-2.0
3 |
--------------------------------------------------------------------------------
/fake-store/src/main/res/mipmap-hdpi/ic_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microg/FakeStore/HEAD/fake-store/src/main/res/mipmap-hdpi/ic_app.png
--------------------------------------------------------------------------------
/fake-store/src/main/res/mipmap-mdpi/ic_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microg/FakeStore/HEAD/fake-store/src/main/res/mipmap-mdpi/ic_app.png
--------------------------------------------------------------------------------
/fake-store/src/main/res/mipmap-xhdpi/ic_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microg/FakeStore/HEAD/fake-store/src/main/res/mipmap-xhdpi/ic_app.png
--------------------------------------------------------------------------------
/fake-store/src/main/res/mipmap-xxhdpi/ic_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microg/FakeStore/HEAD/fake-store/src/main/res/mipmap-xxhdpi/ic_app.png
--------------------------------------------------------------------------------
/fake-store/src/main/res/mipmap-xxxhdpi/ic_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microg/FakeStore/HEAD/fake-store/src/main/res/mipmap-xxxhdpi/ic_app.png
--------------------------------------------------------------------------------
/fake-store/src/main/res/mipmap-hdpi/ic_app_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microg/FakeStore/HEAD/fake-store/src/main/res/mipmap-hdpi/ic_app_round.png
--------------------------------------------------------------------------------
/fake-store/src/main/res/mipmap-mdpi/ic_app_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microg/FakeStore/HEAD/fake-store/src/main/res/mipmap-mdpi/ic_app_round.png
--------------------------------------------------------------------------------
/fake-store/src/main/res/mipmap-xhdpi/ic_app_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microg/FakeStore/HEAD/fake-store/src/main/res/mipmap-xhdpi/ic_app_round.png
--------------------------------------------------------------------------------
/fake-store/src/main/res/mipmap-xxhdpi/ic_app_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microg/FakeStore/HEAD/fake-store/src/main/res/mipmap-xxhdpi/ic_app_round.png
--------------------------------------------------------------------------------
/fake-store/src/main/res/mipmap-xxxhdpi/ic_app_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microg/FakeStore/HEAD/fake-store/src/main/res/mipmap-xxxhdpi/ic_app_round.png
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2015 microG Project Team
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | include ':fake-store'
7 | include ':fake-signature'
8 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # SPDX-FileCopyrightText: 2014 microG Project Team
2 | # SPDX-License-Identifier: CC0-1.0
3 |
4 | build/
5 | .idea/
6 | .gradle/
7 | user.gradle
8 | local.properties
9 | *.iml
10 |
--------------------------------------------------------------------------------
/.reuse/dep5:
--------------------------------------------------------------------------------
1 | Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
2 |
3 | Files: fake-store/src/main/res/mipmap-*/*.png
4 | Copyright: 2023 microG Project Team
5 | License: CC-BY-SA-4.0
6 |
--------------------------------------------------------------------------------
/fake-store/src/main/res/values-v26/ic_app_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 | #C0CA33
9 |
--------------------------------------------------------------------------------
/.github/workflows/reuse.yml:
--------------------------------------------------------------------------------
1 | # SPDX-FileCopyrightText: 2020 microG Team
2 | # SPDX-License-Identifier: CC0-1.0
3 |
4 | name: REUSE Compliance Check
5 | on: [pull_request, push]
6 | jobs:
7 | test:
8 | runs-on: ubuntu-latest
9 | steps:
10 | - uses: actions/checkout@v2
11 | - uses: fsfe/reuse-action@v1
12 |
--------------------------------------------------------------------------------
/fake-store/src/main/aidl/com/google/android/finsky/externalreferrer/IGetInstallReferrerService.aidl:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2023 microG Project Team
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.google.android.finsky.externalreferrer;
7 |
8 | interface IGetInstallReferrerService {
9 | Bundle getInstallReferrer(in Bundle request);
10 | }
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | # SPDX-FileCopyrightText: 2015, microG Project Team
2 | # SPDX-License-Identifier: CC0-1.0
3 |
4 | distributionBase=GRADLE_USER_HOME
5 | distributionPath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
7 | networkTimeout=10000
8 | zipStoreBase=GRADLE_USER_HOME
9 | zipStorePath=wrapper/dists
10 |
--------------------------------------------------------------------------------
/fake-store/src/main/aidl/com/android/vending/licensing/ILicenseV2ResultListener.aidl:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2010 The Android Open Source Project
3 | * SPDX-FileCopyrightText: 2023 microG Project Team
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package com.android.vending.licensing;
8 |
9 | interface ILicenseV2ResultListener {
10 | oneway void verifyLicense(int responseCode, in Bundle responsePayload);
11 | }
--------------------------------------------------------------------------------
/fake-store/src/main/aidl/com/android/vending/licensing/ILicenseResultListener.aidl:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2010 The Android Open Source Project
3 | * SPDX-FileCopyrightText: 2023 microG Project Team
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package com.android.vending.licensing;
8 |
9 | interface ILicenseResultListener {
10 | oneway void verifyLicense(int responseCode, String signedData, String signature);
11 | }
--------------------------------------------------------------------------------
/fake-store/src/main/res/mipmap-anydpi-v26/ic_app_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/fake-store/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
12 |
13 |
--------------------------------------------------------------------------------
/fake-signature/src/main/aidl/com/huawei/signature/diff/ISignatureService.aidl:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2023 microG Project Team
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.huawei.signature.diff;
7 |
8 | /**
9 | * Interface for Huawei Differentiated Signature Capability
10 | * See https://forums.developer.huawei.com/forumPortal/en/topic/0202128603315033024
11 | */
12 | interface ISignatureService {
13 | String[] querySignature(String packageName, boolean suggested);
14 | }
--------------------------------------------------------------------------------
/fake-signature/src/main/res/values/arrays.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 | - com.google.android.gms
9 | - com.android.vending
10 |
11 |
12 | - com.truecaller
13 |
14 |
--------------------------------------------------------------------------------
/fake-store/src/main/res/mipmap-anydpi-v26/ic_app.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/fake-store/src/main/res/values-v11/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
13 |
14 |
--------------------------------------------------------------------------------
/fake-store/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 | microG Companion
9 | microG Companion cannot be used standalone. Opened microG Services settings instead.
10 | microG Companion cannot be used standalone. Please install microG Services to use microG.
11 |
--------------------------------------------------------------------------------
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | # SPDX-FileCopyrightText: 2020 microG Team
2 | # SPDX-License-Identifier: CC0-1.0
3 |
4 | name: Build
5 | on: [pull_request, push]
6 | jobs:
7 | build:
8 | runs-on: ubuntu-latest
9 | steps:
10 | - uses: actions/checkout@v2
11 | with:
12 | fetch-depth: 0
13 | - uses: actions/setup-java@v3
14 | with:
15 | distribution: adopt
16 | java-version: 17
17 | cache: gradle
18 | - run: ./gradlew --no-daemon build
19 | env:
20 | TERM: dumb
21 | JAVA_OPTS: -Xmx2048m
22 |
--------------------------------------------------------------------------------
/fake-signature/build.gradle:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2023 microG Project Team
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | apply plugin: 'com.android.library'
7 |
8 | android {
9 | namespace 'org.microg.signature.fake'
10 | compileSdk androidCompileSdk
11 |
12 | defaultConfig {
13 | minSdk androidMinSdk
14 | targetSdk androidTargetSdk
15 | }
16 |
17 | buildFeatures {
18 | aidl = true
19 | }
20 |
21 | compileOptions {
22 | sourceCompatibility JavaVersion.VERSION_1_8
23 | targetCompatibility JavaVersion.VERSION_1_8
24 | }
25 | }
26 |
27 | dependencies {
28 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
5 |
6 | FakeStore
7 | =========
8 | An empty package that mocks the existence of the Google Play Store to the Play Services client.
9 | Requires the FAKE_PACKAGE_SIGNATURE patch to be functional.
10 |
11 | License
12 | -------
13 | - Code is licensed under [Apache License 2.0](LICENSES/Apache-2.0)
14 | - Documentation and artwork are licensed under [Creative Commons Attribution-ShareAlike 4.0](LICENSES/CC-BY-SA-4.0)
15 | - Some files are placed unter the public domain using [Creative Commons CC0 1.0 Public Domain Dedication](LICENSES/CCO-1.0)
16 |
--------------------------------------------------------------------------------
/fake-store/src/main/aidl/com/android/vending/licensing/ILicensingService.aidl:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2010 The Android Open Source Project
3 | * SPDX-FileCopyrightText: 2023 microG Project Team
4 | * SPDX-License-Identifier: Apache-2.0
5 | */
6 |
7 | package com.android.vending.licensing;
8 |
9 | import com.android.vending.licensing.ILicenseResultListener;
10 | import com.android.vending.licensing.ILicenseV2ResultListener;
11 |
12 | interface ILicensingService {
13 | oneway void checkLicense(long nonce, String packageName, ILicenseResultListener listener);
14 | oneway void checkLicenseV2(String packageName, ILicenseV2ResultListener listener, in Bundle extraParams);
15 |
16 | }
--------------------------------------------------------------------------------
/fake-signature/src/main/java/com/huawei/signature/diff/InitReceiver.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2023 microG Project Team
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.huawei.signature.diff;
7 |
8 | import android.annotation.SuppressLint;
9 | import android.content.BroadcastReceiver;
10 | import android.content.Context;
11 | import android.content.Intent;
12 |
13 | /**
14 | * This is to make sure the process is initialized at boot.
15 | */
16 | public class InitReceiver extends BroadcastReceiver {
17 | @SuppressLint("UnsafeProtectedBroadcastReceiver")
18 | @Override
19 | public void onReceive(Context context, Intent intent) {
20 | // We don't need to do anything, the process is already started.
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/fake-store/build.gradle:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2015 microG Project Team
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | apply plugin: 'com.android.application'
7 |
8 | android {
9 | namespace "com.android.vending"
10 | compileSdkVersion androidCompileSdk
11 | buildToolsVersion "$androidBuildVersionTools"
12 |
13 | defaultConfig {
14 | versionName version
15 | versionCode appVersionCode
16 | minSdkVersion androidMinSdk
17 | targetSdkVersion androidTargetSdk
18 | }
19 |
20 | buildFeatures {
21 | aidl = true
22 | }
23 |
24 | compileOptions {
25 | sourceCompatibility JavaVersion.VERSION_1_8
26 | targetCompatibility JavaVersion.VERSION_1_8
27 | }
28 | }
29 |
30 | dependencies {
31 | implementation project(':fake-signature')
32 | }
33 |
34 | if (file('user.gradle').exists()) {
35 | apply from: 'user.gradle'
36 | }
37 |
--------------------------------------------------------------------------------
/fake-store/src/main/java/com/android/vending/GrantFakeSignaturePermissionActivity.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2016 microG Project Team
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.android.vending;
7 |
8 | import android.annotation.TargetApi;
9 | import android.app.Activity;
10 | import android.content.pm.PackageManager;
11 | import android.os.Build;
12 | import android.os.Bundle;
13 |
14 | @TargetApi(Build.VERSION_CODES.M)
15 | public class GrantFakeSignaturePermissionActivity extends Activity {
16 | @Override
17 | protected void onCreate(Bundle savedInstanceState) {
18 | super.onCreate(savedInstanceState);
19 | if (checkSelfPermission("android.permission.FAKE_PACKAGE_SIGNATURE") != PackageManager.PERMISSION_GRANTED) {
20 | requestPermissions(new String[]{"android.permission.FAKE_PACKAGE_SIGNATURE"}, 1);
21 | } else {
22 | setResult(RESULT_OK);
23 | finish();
24 | }
25 | }
26 |
27 | @Override
28 | public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
29 | if (requestCode == 1 && grantResults.length == 1) {
30 | setResult(grantResults[0] == PackageManager.PERMISSION_GRANTED ? RESULT_OK : RESULT_CANCELED);
31 | finish();
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/fake-store/src/main/java/com/android/vending/licensing/LicensingService.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2023 microG Project Team
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.android.vending.licensing;
7 |
8 | import android.app.Service;
9 | import android.content.Intent;
10 | import android.os.Bundle;
11 | import android.os.IBinder;
12 | import android.os.RemoteException;
13 | import android.util.Log;
14 |
15 | public class LicensingService extends Service {
16 | private static final String TAG = "FakeLicenseService";
17 |
18 | private final ILicensingService.Stub mLicenseService = new ILicensingService.Stub() {
19 |
20 | @Override
21 | public void checkLicense(long nonce, String packageName, ILicenseResultListener listener) throws RemoteException {
22 | Log.d(TAG, "checkLicense(" + nonce + ", " + packageName + ")");
23 | // We don't return anything yet. Seems to work good for some checkers.
24 | }
25 |
26 | @Override
27 | public void checkLicenseV2(String packageName, ILicenseV2ResultListener listener, Bundle extraParams) throws RemoteException {
28 | Log.d(TAG, "checkLicenseV2(" + packageName + ", " + extraParams + ")");
29 | // We don't return anything yet. Seems to work good for some checkers.
30 | }
31 | };
32 |
33 | public IBinder onBind(Intent intent) {
34 | return mLicenseService;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/fake-store/src/main/java/org/microg/vending/ui/MainActivity.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2023 microG Project Team
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.microg.vending.ui;
7 |
8 | import android.app.Activity;
9 | import android.content.Intent;
10 | import android.os.Bundle;
11 | import android.util.Log;
12 | import android.widget.Toast;
13 | import com.android.vending.R;
14 |
15 | public class MainActivity extends Activity {
16 | private static final String TAG = "MainActivity";
17 | private static final String GMS_PACKAGE_NAME = "com.google.android.gms";
18 |
19 | @Override
20 | protected void onCreate(Bundle savedInstanceState) {
21 | super.onCreate(savedInstanceState);
22 | try {
23 | Intent intent = new Intent(Intent.ACTION_MAIN);
24 | intent.setPackage(GMS_PACKAGE_NAME);
25 | try {
26 | startActivity(intent);
27 | } catch (Exception e) {
28 | Log.w(TAG, "MAIN activity is not DEFAULT. Trying to resolve instead.");
29 | intent.setClassName(GMS_PACKAGE_NAME, getPackageManager().resolveActivity(intent, 0).activityInfo.name);
30 | startActivity(intent);
31 | }
32 | Toast.makeText(this, R.string.toast_installed, Toast.LENGTH_LONG).show();
33 | } catch (Exception e) {
34 | Log.w(TAG, "Failed launching microG Settings", e);
35 | Toast.makeText(this, R.string.toast_not_installed, Toast.LENGTH_LONG).show();
36 | }
37 | finish();
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/fake-store/src/main/java/com/google/android/finsky/externalreferrer/GetInstallReferrerService.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2023 microG Project Team
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.google.android.finsky.externalreferrer;
7 |
8 | import android.app.Service;
9 | import android.content.Intent;
10 | import android.os.Bundle;
11 | import android.os.IBinder;
12 | import android.os.RemoteException;
13 |
14 | public class GetInstallReferrerService extends Service {
15 | private static final String TAG = "FakeReferrerService";
16 |
17 | private final IGetInstallReferrerService.Stub service = new IGetInstallReferrerService.Stub() {
18 | // https://developer.android.com/google/play/installreferrer/igetinstallreferrerservice
19 | @Override
20 | public Bundle getInstallReferrer(Bundle request) throws RemoteException {
21 | String packageName = request.getString("package_name");
22 | Bundle result = new Bundle();
23 | result.putString("install_referrer", "https://play.google.com/store/apps/details?utm_source=google-play&utm_medium=organic&id="+packageName);
24 | result.putLong("referrer_click_timestamp_seconds", 0);
25 | result.putLong("referrer_click_timestamp_server_seconds", 0);
26 | result.putLong("install_begin_timestamp_seconds", 0);
27 | result.putLong("install_begin_timestamp_server_seconds", 0);
28 | result.putString("install_version", null);
29 | result.putBoolean("google_play_instant", false);
30 | return result;
31 | }
32 | };
33 |
34 | @Override
35 | public IBinder onBind(Intent intent) {
36 | return service.asBinder();
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/fake-store/src/main/res/drawable-v26/ic_app_foreground.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
17 |
23 |
29 |
35 |
41 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/fake-store/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
11 |
12 |
17 |
18 |
22 |
23 |
26 |
27 |
28 |
29 |
30 |
31 |
34 |
35 |
36 |
37 |
38 |
39 |
42 |
43 |
44 |
45 |
46 |
47 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/fake-store/src/main/res/drawable-v26/ic_app_foreground_mono.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
17 |
24 |
32 |
40 |
48 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/fake-signature/src/main/java/com/huawei/signature/diff/InitProvider.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2023 microG Project Team
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.huawei.signature.diff;
7 |
8 | import android.app.ActivityManager;
9 | import android.content.ContentProvider;
10 | import android.content.ContentValues;
11 | import android.content.Context;
12 | import android.content.Intent;
13 | import android.database.Cursor;
14 | import android.net.Uri;
15 | import android.util.Log;
16 | import java.util.List;
17 |
18 | public class InitProvider extends ContentProvider {
19 | private static final String TAG = InitProvider.class.getSimpleName();
20 |
21 | @Override
22 | public boolean onCreate() {
23 | Log.d(TAG, "onCreate");
24 | if (!isServiceRunning(getContext(), getContext().getPackageName(), SignatureService.class.getName())) {
25 | Intent intent = new Intent(getContext(), SignatureService.class);
26 | try {
27 | getContext().startService(intent);
28 | } catch (Exception ignored) {
29 | }
30 | }
31 | return false;
32 | }
33 |
34 | private boolean isServiceRunning(Context context, String packageName, String serviceName) {
35 | ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
36 | List serviceInfoList = manager.getRunningServices(Integer.MAX_VALUE);
37 | if (serviceInfoList == null) {
38 | return false;
39 | }
40 | for (ActivityManager.RunningServiceInfo info : serviceInfoList) {
41 | if (info.service.getPackageName().equals(packageName) && info.service.getClassName().equals(serviceName)) {
42 | return true;
43 | }
44 | }
45 | return false;
46 | }
47 |
48 | @Override
49 | public int delete(Uri uri, String selection, String[] selectionArgs) {
50 | return 0;
51 | }
52 |
53 | @Override
54 | public String getType(Uri uri) {
55 | return null;
56 | }
57 |
58 | @Override
59 | public Uri insert(Uri uri, ContentValues values) {
60 | return null;
61 | }
62 |
63 | @Override
64 | public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
65 | return null;
66 | }
67 |
68 | @Override
69 | public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
70 | return 0;
71 | }
72 | }
--------------------------------------------------------------------------------
/fake-signature/src/main/java/com/huawei/signature/diff/AppListDatabaseOpenHelper.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2023 microG Project Team
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.huawei.signature.diff;
7 |
8 | import android.content.ContentValues;
9 | import android.content.Context;
10 | import android.database.sqlite.SQLiteDatabase;
11 | import android.database.sqlite.SQLiteOpenHelper;
12 | import android.util.Log;
13 | import org.microg.signature.fake.R;
14 |
15 | public class AppListDatabaseOpenHelper extends SQLiteOpenHelper {
16 | private static final String TAG = AppListDatabaseOpenHelper.class.getSimpleName();
17 | private static final String DATABASE_NAME = "app_list.db";
18 | public static final String TABLE_APPLIST = "applist";
19 | public static final String COLUMN_NAME = "name";
20 | public static final String COLUMN_FAKE = "fake";
21 | private static final int DATABASE_VERSION = 2;
22 | private static final String DROP_APP_LIST_TABLE = "DROP TABLE IF EXISTS " + TABLE_APPLIST;
23 | private static final String CREATE_APP_LIST_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_APPLIST + "(" +
24 | COLUMN_NAME + " VARCHAR(255) PRIMARY KEY, " +
25 | COLUMN_FAKE + " INTEGER CHECK(" + COLUMN_FAKE + " >= 0 and " + COLUMN_FAKE + " <= 1)" +
26 | ")";
27 | private final Context context;
28 |
29 | public AppListDatabaseOpenHelper(Context context) {
30 | super(context, DATABASE_NAME, null, DATABASE_VERSION);
31 | this.context = context;
32 | }
33 |
34 | @Override
35 | public void onCreate(SQLiteDatabase db) {
36 | Log.d(TAG, "onCreate");
37 | db.execSQL(DROP_APP_LIST_TABLE);
38 | db.execSQL(CREATE_APP_LIST_TABLE);
39 | initData(db);
40 | }
41 |
42 | @Override
43 | public void onOpen(SQLiteDatabase db) {
44 | super.onOpen(db);
45 | initData(db);
46 | }
47 |
48 | private void initData(SQLiteDatabase db) {
49 | String[] wantFakeApps = context.getResources().getStringArray(R.array.signature_want_fake);
50 | String[] neverFakeApps = context.getResources().getStringArray(R.array.signature_never_fake);
51 | if (wantFakeApps.length == 0 && neverFakeApps.length == 0) {
52 | return;
53 | }
54 | for (String app : wantFakeApps) {
55 | db.insertWithOnConflict(TABLE_APPLIST, null, generateValues(app, true), SQLiteDatabase.CONFLICT_IGNORE);
56 | }
57 | for (String app : neverFakeApps) {
58 | db.insertWithOnConflict(TABLE_APPLIST, null, generateValues(app, false), SQLiteDatabase.CONFLICT_IGNORE);
59 | }
60 | }
61 |
62 | private ContentValues generateValues(String packageName, boolean fake) {
63 | ContentValues contentValues = new ContentValues();
64 | contentValues.put(COLUMN_NAME, packageName);
65 | contentValues.put(COLUMN_FAKE, fake ? 1 : 0);
66 | return contentValues;
67 | }
68 |
69 | @Override
70 | public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
71 | onCreate(db);
72 | }
73 | }
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem SPDX-License-Identifier: Apache-2.0
2 | @rem
3 | @rem Copyright 2015 the original author or authors.
4 | @rem
5 | @rem Licensed under the Apache License, Version 2.0 (the "License");
6 | @rem you may not use this file except in compliance with the License.
7 | @rem You may obtain a copy of the License at
8 | @rem
9 | @rem https://www.apache.org/licenses/LICENSE-2.0
10 | @rem
11 | @rem Unless required by applicable law or agreed to in writing, software
12 | @rem distributed under the License is distributed on an "AS IS" BASIS,
13 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | @rem See the License for the specific language governing permissions and
15 | @rem limitations under the License.
16 | @rem
17 |
18 | @if "%DEBUG%"=="" @echo off
19 | @rem ##########################################################################
20 | @rem
21 | @rem Gradle startup script for Windows
22 | @rem
23 | @rem ##########################################################################
24 |
25 | @rem Set local scope for the variables with windows NT shell
26 | if "%OS%"=="Windows_NT" setlocal
27 |
28 | set DIRNAME=%~dp0
29 | if "%DIRNAME%"=="" set DIRNAME=.
30 | @rem This is normally unused
31 | set APP_BASE_NAME=%~n0
32 | set APP_HOME=%DIRNAME%
33 |
34 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
35 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
36 |
37 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
38 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
39 |
40 | @rem Find java.exe
41 | if defined JAVA_HOME goto findJavaFromJavaHome
42 |
43 | set JAVA_EXE=java.exe
44 | %JAVA_EXE% -version >NUL 2>&1
45 | if %ERRORLEVEL% equ 0 goto execute
46 |
47 | echo.
48 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
49 | echo.
50 | echo Please set the JAVA_HOME variable in your environment to match the
51 | echo location of your Java installation.
52 |
53 | goto fail
54 |
55 | :findJavaFromJavaHome
56 | set JAVA_HOME=%JAVA_HOME:"=%
57 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
58 |
59 | if exist "%JAVA_EXE%" goto execute
60 |
61 | echo.
62 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
63 | echo.
64 | echo Please set the JAVA_HOME variable in your environment to match the
65 | echo location of your Java installation.
66 |
67 | goto fail
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 |
75 | @rem Execute Gradle
76 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
77 |
78 | :end
79 | @rem End local scope for the variables with windows NT shell
80 | if %ERRORLEVEL% equ 0 goto mainEnd
81 |
82 | :fail
83 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
84 | rem the _cmd.exe /c_ return code!
85 | set EXIT_CODE=%ERRORLEVEL%
86 | if %EXIT_CODE% equ 0 set EXIT_CODE=1
87 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
88 | exit /b %EXIT_CODE%
89 |
90 | :mainEnd
91 | if "%OS%"=="Windows_NT" endlocal
92 |
93 | :omega
94 |
--------------------------------------------------------------------------------
/fake-signature/src/main/res/values/signature.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 | 308204433082032ba003020102020900c2e08746644a308d300d06092a864886f70d01010405003074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f6964301e170d3038303832313233313333345a170d3336303130373233313333345a3074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f696430820120300d06092a864886f70d01010105000382010d00308201080282010100ab562e00d83ba208ae0a966f124e29da11f2ab56d08f58e2cca91303e9b754d372f640a71b1dcb130967624e4656a7776a92193db2e5bfb724a91e77188b0e6a47a43b33d9609b77183145ccdf7b2e586674c9e1565b1f4c6a5955bff251a63dabf9c55c27222252e875e4f8154a645f897168c0b1bfc612eabf785769bb34aa7984dc7e2ea2764cae8307d8c17154d7ee5f64a51a44a602c249054157dc02cd5f5c0e55fbef8519fbe327f0b1511692c5a06f19d18385f5c4dbc2d6b93f68cc2979c70e18ab93866b3bd5db8999552a0e3b4c99df58fb918bedc182ba35e003c1b4b10dd244a8ee24fffd333872ab5221985edab0fc0d0b145b6aa192858e79020103a381d93081d6301d0603551d0e04160414c77d8cc2211756259a7fd382df6be398e4d786a53081a60603551d2304819e30819b8014c77d8cc2211756259a7fd382df6be398e4d786a5a178a4763074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f6964820900c2e08746644a308d300c0603551d13040530030101ff300d06092a864886f70d010104050003820101006dd252ceef85302c360aaace939bcff2cca904bb5d7a1661f8ae46b2994204d0ff4a68c7ed1a531ec4595a623ce60763b167297a7ae35712c407f208f0cb109429124d7b106219c084ca3eb3f9ad5fb871ef92269a8be28bf16d44c8d9a08e6cb2f005bb3fe2cb96447e868e731076ad45b33f6009ea19c161e62641aa99271dfd5228c5c587875ddb7f452758d661f6cc0cccb7352e424cc4365c523532f7325137593c4ae341f4db41edda0d0b1071a7c440f0fe9ea01cb627ca674369d084bd2fd911ff06cdbf2cfa10dc0f893ae35762919048c7efc64c7144178342f70581c9de573af55b390dd7fdb9418631895d5f759f30112687ff621410c069308a
10 |
11 |
12 | 308202ed308201d5a003020102020426ffa009300d06092a864886f70d01010b05003027310b300906035504061302444531183016060355040a130f4e4f47415050532050726f6a656374301e170d3132313030363132303533325a170d3337303933303132303533325a3027310b300906035504061302444531183016060355040a130f4e4f47415050532050726f6a65637430820122300d06092a864886f70d01010105000382010f003082010a02820101009a8d2a5336b0eaaad89ce447828c7753b157459b79e3215dc962ca48f58c2cd7650df67d2dd7bda0880c682791f32b35c504e43e77b43c3e4e541f86e35a8293a54fb46e6b16af54d3a4eda458f1a7c8bc1b7479861ca7043337180e40079d9cdccb7e051ada9b6c88c9ec635541e2ebf0842521c3024c826f6fd6db6fd117c74e859d5af4db04448965ab5469b71ce719939a06ef30580f50febf96c474a7d265bb63f86a822ff7b643de6b76e966a18553c2858416cf3309dd24278374bdd82b4404ef6f7f122cec93859351fc6e5ea947e3ceb9d67374fe970e593e5cd05c905e1d24f5a5484f4aadef766e498adf64f7cf04bddd602ae8137b6eea40722d0203010001a321301f301d0603551d0e04160414110b7aa9ebc840b20399f69a431f4dba6ac42a64300d06092a864886f70d01010b0500038201010007c32ad893349cf86952fb5a49cfdc9b13f5e3c800aece77b2e7e0e9c83e34052f140f357ec7e6f4b432dc1ed542218a14835acd2df2deea7efd3fd5e8f1c34e1fb39ec6a427c6e6f4178b609b369040ac1f8844b789f3694dc640de06e44b247afed11637173f36f5886170fafd74954049858c6096308fc93c1bc4dd5685fa7a1f982a422f2a3b36baa8c9500474cf2af91c39cbec1bc898d10194d368aa5e91f1137ec115087c31962d8f76cd120d28c249cf76f4c70f5baa08c70a7234ce4123be080cee789477401965cfe537b924ef36747e8caca62dfefdd1a6288dcb1c4fd2aaa6131a7ad254e9742022cfd597d2ca5c660ce9e41ff537e5a4041e37
13 |
14 |
--------------------------------------------------------------------------------
/fake-signature/src/main/java/com/huawei/signature/diff/SignatureService.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2023 microG Project Team
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.huawei.signature.diff;
7 |
8 | import static com.huawei.signature.diff.AppListDatabaseOpenHelper.COLUMN_NAME;
9 | import static com.huawei.signature.diff.AppListDatabaseOpenHelper.TABLE_APPLIST;
10 |
11 | import android.app.Service;
12 | import android.content.Intent;
13 | import android.database.Cursor;
14 | import android.database.sqlite.SQLiteDatabase;
15 | import android.os.Binder;
16 | import android.os.IBinder;
17 | import android.os.Parcel;
18 | import android.os.RemoteException;
19 | import android.util.Log;
20 | import org.microg.signature.fake.R;
21 |
22 | import java.io.FileDescriptor;
23 | import java.io.PrintWriter;
24 | import java.util.Date;
25 |
26 | public class SignatureService extends Service {
27 | private static final String TAG = "SignatureService";
28 | private SQLiteDatabase database;
29 | private AppListDatabaseOpenHelper openHelper;
30 | private long start;
31 |
32 | @Override
33 | public void onCreate() {
34 | super.onCreate();
35 | this.openHelper = new AppListDatabaseOpenHelper(this);
36 | this.database = openHelper.getReadableDatabase();
37 | this.start = System.currentTimeMillis();
38 | }
39 |
40 | @Override
41 | public int onStartCommand(Intent intent, int flags, int startId) {
42 | Log.i(TAG, "onStartCommand");
43 | return START_STICKY;
44 | }
45 |
46 |
47 | @Override
48 | public IBinder onBind(Intent intent) {
49 | return binder;
50 | }
51 |
52 | @Override
53 | public void onDestroy() {
54 | this.openHelper.close();
55 | super.onDestroy();
56 | }
57 |
58 | @Override
59 | protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
60 | writer.println("Started: " + new Date(start));
61 | }
62 |
63 | private final ISignatureService.Stub binder = new ISignatureService.Stub() {
64 |
65 | @Override
66 | public boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException {
67 | if (Binder.getCallingPid() > 10000) {
68 | Log.w(TAG, "Illegal access from app");
69 | reply.writeException(new UnsupportedOperationException("Illegal"));
70 | return true;
71 | }
72 | return super.onTransact(code, data, reply, flags);
73 | }
74 |
75 | @Override
76 | public String[] querySignature(String packageName, boolean suggested) throws RemoteException {
77 | try (Cursor cursor = database.query(TABLE_APPLIST, null, COLUMN_NAME + "=?",
78 | new String[]{packageName}, null, null, null)) {
79 | switch (cursor.getCount()) {
80 | case 0:
81 | return getResult(suggested);
82 | case 1:
83 | if (cursor.moveToFirst()) {
84 | int shouldFake = cursor.getInt(1);
85 | return getResult(shouldFake == 1);
86 | }
87 | break;
88 | default:
89 | throw new IllegalArgumentException("result size: " + cursor.getCount());
90 | }
91 |
92 | } catch (Exception e) {
93 | Log.w(TAG, e);
94 | }
95 | return getResult(false);
96 | }
97 |
98 | private String[] getResult(boolean useFakeSignature) {
99 | if (useFakeSignature) {
100 | return new String[]{getString(R.string.fake_signature),};
101 | } else {
102 | return new String[]{getString(R.string.real_signature),};
103 | }
104 | }
105 | };
106 | }
--------------------------------------------------------------------------------
/fake-store/src/main/java/com/android/vending/billing/InAppBillingService.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2016 microG Project Team
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package com.android.vending.billing;
7 |
8 | import android.app.Service;
9 | import android.content.Intent;
10 | import android.os.Bundle;
11 | import android.os.IBinder;
12 | import android.os.Parcel;
13 | import android.os.RemoteException;
14 | import android.util.Log;
15 |
16 | import java.util.ArrayList;
17 | import java.util.List;
18 |
19 | public class InAppBillingService extends Service {
20 | private static final String TAG = "FakeInAppStore";
21 |
22 | private final IInAppBillingService.Stub mInAppBillingService = new IInAppBillingService.Stub() {
23 | @Override
24 | public int isBillingSupported(int apiVersion, String packageName, String type) throws RemoteException {
25 | return isBillingSupportedV7(apiVersion, packageName, type, new Bundle());
26 | }
27 |
28 | @Override
29 | public Bundle getSkuDetails(int apiVersion, String packageName, String type, Bundle skusBundle) throws RemoteException {
30 | return getSkuDetailsV10(apiVersion, packageName, type, skusBundle, new Bundle());
31 | }
32 |
33 | @Override
34 | public Bundle getBuyIntent(int apiVersion, String packageName, String sku, String type, String developerPayload) throws RemoteException {
35 | return getBuyIntentV6(apiVersion, packageName, sku, type, developerPayload, new Bundle());
36 | }
37 |
38 | @Override
39 | public Bundle getPurchases(int apiVersion, String packageName, String type, String continuationToken) throws RemoteException {
40 | return getPurchasesV6(apiVersion, packageName, type, continuationToken, new Bundle());
41 | }
42 |
43 | @Override
44 | public int consumePurchase(int apiVersion, String packageName, String purchaseToken) throws RemoteException {
45 | return consumePurchaseV9(apiVersion, packageName, purchaseToken, new Bundle()).getInt("RESPONSE_CODE", 8);
46 | }
47 |
48 | @Override
49 | public Bundle getBuyIntentToReplaceSkus(int apiVersion, String packageName, List oldSkus, String newSku, String type, String developerPayload) throws RemoteException {
50 | Log.d(TAG, "getBuyIntentToReplaceSkus(" + apiVersion + ", " + packageName + ", " + newSku + ", " + type + ", " + developerPayload + ")");
51 | Bundle data = new Bundle();
52 | data.putInt("RESPONSE_CODE", 4);
53 | return data;
54 | }
55 |
56 | @Override
57 | public Bundle getBuyIntentV6(int apiVersion, String packageName, String sku, String type, String developerPayload, Bundle extras) throws RemoteException {
58 | Log.d(TAG, "getBuyIntent(" + apiVersion + ", " + packageName + ", " + sku + ", " + type + ", " + developerPayload + ")");
59 | Bundle data = new Bundle();
60 | data.putInt("RESPONSE_CODE", 4);
61 | return data;
62 | }
63 |
64 | @Override
65 | public Bundle getPurchasesV6(int apiVersion, String packageName, String type, String continuationToken, Bundle extras) throws RemoteException {
66 | return getPurchasesV9(apiVersion, packageName, type, continuationToken, extras);
67 | }
68 |
69 | @Override
70 | public int isBillingSupportedV7(int apiVersion, String packageName, String type, Bundle extras) throws RemoteException {
71 | Log.d(TAG, "isBillingSupported(" + apiVersion + ", " + packageName + ", " + type + ")");
72 | return 0;
73 | }
74 |
75 | @Override
76 | public Bundle getPurchasesV9(int apiVersion, String packageName, String type, String continuationToken, Bundle extras) throws RemoteException {
77 | Log.d(TAG, "getPurchases(" + apiVersion + ", " + packageName + ", " + type + ", " + continuationToken + ")");
78 | Bundle data = new Bundle();
79 | data.putInt("RESPONSE_CODE", 0);
80 | data.putStringArrayList("INAPP_PURCHASE_ITEM_LIST", new ArrayList());
81 | data.putStringArrayList("INAPP_PURCHASE_DATA_LIST", new ArrayList());
82 | data.putStringArrayList("INAPP_DATA_SIGNATURE_LIST", new ArrayList());
83 | return data;
84 | }
85 |
86 | @Override
87 | public Bundle consumePurchaseV9(int apiVersion, String packageName, String purchaseToken, Bundle extras) throws RemoteException {
88 | Log.d(TAG, "consumePurchase(" + apiVersion + ", " + packageName + ", " + purchaseToken + ")");
89 | Bundle data = new Bundle();
90 | data.putInt("RESPONSE_CODE", 8);
91 | return data;
92 | }
93 |
94 | @Override
95 | public Bundle getPriceChangeConfirmationIntent(int apiVersion, String packageName, String sku, String type, Bundle extras) throws RemoteException {
96 | Log.d(TAG, "getPriceChangeConfirmationIntent(" + apiVersion + ", " + packageName + ", " + sku + ", " + type + ")");
97 | Bundle data = new Bundle();
98 | data.putInt("RESPONSE_CODE", 4);
99 | return data;
100 | }
101 |
102 | @Override
103 | public Bundle getSkuDetailsV10(int apiVersion, String packageName, String type, Bundle skuBundle, Bundle extras) throws RemoteException {
104 | Log.d(TAG, "getSkuDetails(" + apiVersion + ", " + packageName + ", " + type + ")");
105 | Bundle data = new Bundle();
106 | data.putInt("RESPONSE_CODE", 0);
107 | data.putStringArrayList("DETAILS_LIST", new ArrayList());
108 | return data;
109 | }
110 |
111 | @Override
112 | public Bundle acknowledgePurchase(int apiVersion, String packageName, String purchaseToken, Bundle extras) throws RemoteException {
113 | Log.d(TAG, "acknowledgePurchase(" + apiVersion + ", " + packageName + ", " + purchaseToken + ")");
114 | Bundle data = new Bundle();
115 | data.putInt("RESPONSE_CODE", 8);
116 | return data;
117 | }
118 |
119 | @Override
120 | public boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException {
121 | if (super.onTransact(code, data, reply, flags)) return true;
122 | Log.d(TAG, "onTransact [unknown]: " + code + ", " + data + ", " + flags);
123 | return false;
124 | }
125 | };
126 |
127 | public IBinder onBind(Intent intent) {
128 | return mInAppBillingService;
129 | }
130 | }
131 |
--------------------------------------------------------------------------------
/LICENSES/CC0-1.0.txt:
--------------------------------------------------------------------------------
1 | Creative Commons Legal Code
2 |
3 | CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES
4 | NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE
5 | AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION
6 | ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE
7 | OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS
8 | LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION
9 | OR WORKS PROVIDED HEREUNDER.
10 |
11 | Statement of Purpose
12 |
13 | The laws of most jurisdictions throughout the world automatically confer exclusive
14 | Copyright and Related Rights (defined below) upon the creator and subsequent
15 | owner(s) (each and all, an "owner") of an original work of authorship and/or
16 | a database (each, a "Work").
17 |
18 | Certain owners wish to permanently relinquish those rights to a Work for the
19 | purpose of contributing to a commons of creative, cultural and scientific
20 | works ("Commons") that the public can reliably and without fear of later claims
21 | of infringement build upon, modify, incorporate in other works, reuse and
22 | redistribute as freely as possible in any form whatsoever and for any purposes,
23 | including without limitation commercial purposes. These owners may contribute
24 | to the Commons to promote the ideal of a free culture and the further production
25 | of creative, cultural and scientific works, or to gain reputation or greater
26 | distribution for their Work in part through the use and efforts of others.
27 |
28 | For these and/or other purposes and motivations, and without any expectation
29 | of additional consideration or compensation, the person associating CC0 with
30 | a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
31 | and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
32 | and publicly distribute the Work under its terms, with knowledge of his or
33 | her Copyright and Related Rights in the Work and the meaning and intended
34 | legal effect of CC0 on those rights.
35 |
36 | 1. Copyright and Related Rights. A Work made available under CC0 may be protected
37 | by copyright and related or neighboring rights ("Copyright and Related Rights").
38 | Copyright and Related Rights include, but are not limited to, the following:
39 |
40 | i. the right to reproduce, adapt, distribute, perform, display, communicate,
41 | and translate a Work;
42 |
43 | ii. moral rights retained by the original author(s) and/or performer(s);
44 |
45 | iii. publicity and privacy rights pertaining to a person's image or likeness
46 | depicted in a Work;
47 |
48 | iv. rights protecting against unfair competition in regards to a Work, subject
49 | to the limitations in paragraph 4(a), below;
50 |
51 | v. rights protecting the extraction, dissemination, use and reuse of data
52 | in a Work;
53 |
54 | vi. database rights (such as those arising under Directive 96/9/EC of the
55 | European Parliament and of the Council of 11 March 1996 on the legal protection
56 | of databases, and under any national implementation thereof, including any
57 | amended or successor version of such directive); and
58 |
59 | vii. other similar, equivalent or corresponding rights throughout the world
60 | based on applicable law or treaty, and any national implementations thereof.
61 |
62 | 2. Waiver. To the greatest extent permitted by, but not in contravention of,
63 | applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
64 | unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
65 | and Related Rights and associated claims and causes of action, whether now
66 | known or unknown (including existing as well as future claims and causes of
67 | action), in the Work (i) in all territories worldwide, (ii) for the maximum
68 | duration provided by applicable law or treaty (including future time extensions),
69 | (iii) in any current or future medium and for any number of copies, and (iv)
70 | for any purpose whatsoever, including without limitation commercial, advertising
71 | or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the
72 | benefit of each member of the public at large and to the detriment of Affirmer's
73 | heirs and successors, fully intending that such Waiver shall not be subject
74 | to revocation, rescission, cancellation, termination, or any other legal or
75 | equitable action to disrupt the quiet enjoyment of the Work by the public
76 | as contemplated by Affirmer's express Statement of Purpose.
77 |
78 | 3. Public License Fallback. Should any part of the Waiver for any reason be
79 | judged legally invalid or ineffective under applicable law, then the Waiver
80 | shall be preserved to the maximum extent permitted taking into account Affirmer's
81 | express Statement of Purpose. In addition, to the extent the Waiver is so
82 | judged Affirmer hereby grants to each affected person a royalty-free, non
83 | transferable, non sublicensable, non exclusive, irrevocable and unconditional
84 | license to exercise Affirmer's Copyright and Related Rights in the Work (i)
85 | in all territories worldwide, (ii) for the maximum duration provided by applicable
86 | law or treaty (including future time extensions), (iii) in any current or
87 | future medium and for any number of copies, and (iv) for any purpose whatsoever,
88 | including without limitation commercial, advertising or promotional purposes
89 | (the "License"). The License shall be deemed effective as of the date CC0
90 | was applied by Affirmer to the Work. Should any part of the License for any
91 | reason be judged legally invalid or ineffective under applicable law, such
92 | partial invalidity or ineffectiveness shall not invalidate the remainder of
93 | the License, and in such case Affirmer hereby affirms that he or she will
94 | not (i) exercise any of his or her remaining Copyright and Related Rights
95 | in the Work or (ii) assert any associated claims and causes of action with
96 | respect to the Work, in either case contrary to Affirmer's express Statement
97 | of Purpose.
98 |
99 | 4. Limitations and Disclaimers.
100 |
101 | a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered,
102 | licensed or otherwise affected by this document.
103 |
104 | b. Affirmer offers the Work as-is and makes no representations or warranties
105 | of any kind concerning the Work, express, implied, statutory or otherwise,
106 | including without limitation warranties of title, merchantability, fitness
107 | for a particular purpose, non infringement, or the absence of latent or other
108 | defects, accuracy, or the present or absence of errors, whether or not discoverable,
109 | all to the greatest extent permissible under applicable law.
110 |
111 | c. Affirmer disclaims responsibility for clearing rights of other persons
112 | that may apply to the Work or any use thereof, including without limitation
113 | any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims
114 | responsibility for obtaining any necessary consents, permissions or other
115 | rights required for any use of the Work.
116 |
117 | d. Affirmer understands and acknowledges that Creative Commons is not a party
118 | to this document and has no duty or obligation with respect to this CC0 or
119 | use of the Work.
120 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # SPDX-License-Identifier: Apache-2.0
4 | #
5 | # Copyright © 2015-2021 the original authors.
6 | #
7 | # Licensed under the Apache License, Version 2.0 (the "License");
8 | # you may not use this file except in compliance with the License.
9 | # You may obtain a copy of the License at
10 | #
11 | # https://www.apache.org/licenses/LICENSE-2.0
12 | #
13 | # Unless required by applicable law or agreed to in writing, software
14 | # distributed under the License is distributed on an "AS IS" BASIS,
15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | # See the License for the specific language governing permissions and
17 | # limitations under the License.
18 | #
19 |
20 | ##############################################################################
21 | #
22 | # Gradle start up script for POSIX generated by Gradle.
23 | #
24 | # Important for running:
25 | #
26 | # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
27 | # noncompliant, but you have some other compliant shell such as ksh or
28 | # bash, then to run this script, type that shell name before the whole
29 | # command line, like:
30 | #
31 | # ksh Gradle
32 | #
33 | # Busybox and similar reduced shells will NOT work, because this script
34 | # requires all of these POSIX shell features:
35 | # * functions;
36 | # * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
37 | # «${var#prefix}», «${var%suffix}», and «$( cmd )»;
38 | # * compound commands having a testable exit status, especially «case»;
39 | # * various built-in commands including «command», «set», and «ulimit».
40 | #
41 | # Important for patching:
42 | #
43 | # (2) This script targets any POSIX shell, so it avoids extensions provided
44 | # by Bash, Ksh, etc; in particular arrays are avoided.
45 | #
46 | # The "traditional" practice of packing multiple parameters into a
47 | # space-separated string is a well documented source of bugs and security
48 | # problems, so this is (mostly) avoided, by progressively accumulating
49 | # options in "$@", and eventually passing that to Java.
50 | #
51 | # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
52 | # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
53 | # see the in-line comments for details.
54 | #
55 | # There are tweaks for specific operating systems such as AIX, CygWin,
56 | # Darwin, MinGW, and NonStop.
57 | #
58 | # (3) This script is generated from the Groovy template
59 | # https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
60 | # within the Gradle project.
61 | #
62 | # You can find Gradle at https://github.com/gradle/gradle/.
63 | #
64 | ##############################################################################
65 |
66 | # Attempt to set APP_HOME
67 |
68 | # Resolve links: $0 may be a link
69 | app_path=$0
70 |
71 | # Need this for daisy-chained symlinks.
72 | while
73 | APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
74 | [ -h "$app_path" ]
75 | do
76 | ls=$( ls -ld "$app_path" )
77 | link=${ls#*' -> '}
78 | case $link in #(
79 | /*) app_path=$link ;; #(
80 | *) app_path=$APP_HOME$link ;;
81 | esac
82 | done
83 |
84 | # This is normally unused
85 | # shellcheck disable=SC2034
86 | APP_BASE_NAME=${0##*/}
87 | APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
88 |
89 | # Use the maximum available, or set MAX_FD != -1 to use that value.
90 | MAX_FD=maximum
91 |
92 | warn () {
93 | echo "$*"
94 | } >&2
95 |
96 | die () {
97 | echo
98 | echo "$*"
99 | echo
100 | exit 1
101 | } >&2
102 |
103 | # OS specific support (must be 'true' or 'false').
104 | cygwin=false
105 | msys=false
106 | darwin=false
107 | nonstop=false
108 | case "$( uname )" in #(
109 | CYGWIN* ) cygwin=true ;; #(
110 | Darwin* ) darwin=true ;; #(
111 | MSYS* | MINGW* ) msys=true ;; #(
112 | NONSTOP* ) nonstop=true ;;
113 | esac
114 |
115 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
116 |
117 |
118 | # Determine the Java command to use to start the JVM.
119 | if [ -n "$JAVA_HOME" ] ; then
120 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
121 | # IBM's JDK on AIX uses strange locations for the executables
122 | JAVACMD=$JAVA_HOME/jre/sh/java
123 | else
124 | JAVACMD=$JAVA_HOME/bin/java
125 | fi
126 | if [ ! -x "$JAVACMD" ] ; then
127 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
128 |
129 | Please set the JAVA_HOME variable in your environment to match the
130 | location of your Java installation."
131 | fi
132 | else
133 | JAVACMD=java
134 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
135 |
136 | Please set the JAVA_HOME variable in your environment to match the
137 | location of your Java installation."
138 | fi
139 |
140 | # Increase the maximum file descriptors if we can.
141 | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
142 | case $MAX_FD in #(
143 | max*)
144 | # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
145 | # shellcheck disable=SC3045
146 | MAX_FD=$( ulimit -H -n ) ||
147 | warn "Could not query maximum file descriptor limit"
148 | esac
149 | case $MAX_FD in #(
150 | '' | soft) :;; #(
151 | *)
152 | # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
153 | # shellcheck disable=SC3045
154 | ulimit -n "$MAX_FD" ||
155 | warn "Could not set maximum file descriptor limit to $MAX_FD"
156 | esac
157 | fi
158 |
159 | # Collect all arguments for the java command, stacking in reverse order:
160 | # * args from the command line
161 | # * the main class name
162 | # * -classpath
163 | # * -D...appname settings
164 | # * --module-path (only if needed)
165 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
166 |
167 | # For Cygwin or MSYS, switch paths to Windows format before running java
168 | if "$cygwin" || "$msys" ; then
169 | APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
170 | CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
171 |
172 | JAVACMD=$( cygpath --unix "$JAVACMD" )
173 |
174 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
175 | for arg do
176 | if
177 | case $arg in #(
178 | -*) false ;; # don't mess with options #(
179 | /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
180 | [ -e "$t" ] ;; #(
181 | *) false ;;
182 | esac
183 | then
184 | arg=$( cygpath --path --ignore --mixed "$arg" )
185 | fi
186 | # Roll the args list around exactly as many times as the number of
187 | # args, so each arg winds up back in the position where it started, but
188 | # possibly modified.
189 | #
190 | # NB: a `for` loop captures its iteration list before it begins, so
191 | # changing the positional parameters here affects neither the number of
192 | # iterations, nor the values presented in `arg`.
193 | shift # remove old arg
194 | set -- "$@" "$arg" # push replacement arg
195 | done
196 | fi
197 |
198 |
199 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
200 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
201 |
202 | # Collect all arguments for the java command;
203 | # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
204 | # shell script including quotes and variable substitutions, so put them in
205 | # double quotes to make sure that they get re-expanded; and
206 | # * put everything else in single quotes, so that it's not re-expanded.
207 |
208 | set -- \
209 | "-Dorg.gradle.appname=$APP_BASE_NAME" \
210 | -classpath "$CLASSPATH" \
211 | org.gradle.wrapper.GradleWrapperMain \
212 | "$@"
213 |
214 | # Stop when "xargs" is not available.
215 | if ! command -v xargs >/dev/null 2>&1
216 | then
217 | die "xargs is not available"
218 | fi
219 |
220 | # Use "xargs" to parse quoted args.
221 | #
222 | # With -n1 it outputs one arg per line, with the quotes and backslashes removed.
223 | #
224 | # In Bash we could simply go:
225 | #
226 | # readarray ARGS < <( xargs -n1 <<<"$var" ) &&
227 | # set -- "${ARGS[@]}" "$@"
228 | #
229 | # but POSIX shell has neither arrays nor command substitution, so instead we
230 | # post-process each arg (as a line of input to sed) to backslash-escape any
231 | # character that might be a shell metacharacter, then use eval to reverse
232 | # that process (while maintaining the separation between arguments), and wrap
233 | # the whole thing up as a single "set" statement.
234 | #
235 | # This will of course break if any of these variables contains a newline or
236 | # an unmatched quote.
237 | #
238 |
239 | eval "set -- $(
240 | printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
241 | xargs -n1 |
242 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
243 | tr '\n' ' '
244 | )" '"$@"'
245 |
246 | exec "$JAVACMD" "$@"
247 |
--------------------------------------------------------------------------------
/LICENSES/Apache-2.0.txt:
--------------------------------------------------------------------------------
1 | Apache License
2 |
3 | Version 2.0, January 2004
4 |
5 | http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION,
6 | AND DISTRIBUTION
7 |
8 | 1. Definitions.
9 |
10 |
11 |
12 | "License" shall mean the terms and conditions for use, reproduction, and distribution
13 | as defined by Sections 1 through 9 of this document.
14 |
15 |
16 |
17 | "Licensor" shall mean the copyright owner or entity authorized by the copyright
18 | owner that is granting the License.
19 |
20 |
21 |
22 | "Legal Entity" shall mean the union of the acting entity and all other entities
23 | that control, are controlled by, or are under common control with that entity.
24 | For the purposes of this definition, "control" means (i) the power, direct
25 | or indirect, to cause the direction or management of such entity, whether
26 | by contract or otherwise, or (ii) ownership of fifty percent (50%) or more
27 | of the outstanding shares, or (iii) beneficial ownership of such entity.
28 |
29 |
30 |
31 | "You" (or "Your") shall mean an individual or Legal Entity exercising permissions
32 | granted by this License.
33 |
34 |
35 |
36 | "Source" form shall mean the preferred form for making modifications, including
37 | but not limited to software source code, documentation source, and configuration
38 | files.
39 |
40 |
41 |
42 | "Object" form shall mean any form resulting from mechanical transformation
43 | or translation of a Source form, including but not limited to compiled object
44 | code, generated documentation, and conversions to other media types.
45 |
46 |
47 |
48 | "Work" shall mean the work of authorship, whether in Source or Object form,
49 | made available under the License, as indicated by a copyright notice that
50 | is included in or attached to the work (an example is provided in the Appendix
51 | below).
52 |
53 |
54 |
55 | "Derivative Works" shall mean any work, whether in Source or Object form,
56 | that is based on (or derived from) the Work and for which the editorial revisions,
57 | annotations, elaborations, or other modifications represent, as a whole, an
58 | original work of authorship. For the purposes of this License, Derivative
59 | Works shall not include works that remain separable from, or merely link (or
60 | bind by name) to the interfaces of, the Work and Derivative Works thereof.
61 |
62 |
63 |
64 | "Contribution" shall mean any work of authorship, including the original version
65 | of the Work and any modifications or additions to that Work or Derivative
66 | Works thereof, that is intentionally submitted to Licensor for inclusion in
67 | the Work by the copyright owner or by an individual or Legal Entity authorized
68 | to submit on behalf of the copyright owner. For the purposes of this definition,
69 | "submitted" means any form of electronic, verbal, or written communication
70 | sent to the Licensor or its representatives, including but not limited to
71 | communication on electronic mailing lists, source code control systems, and
72 | issue tracking systems that are managed by, or on behalf of, the Licensor
73 | for the purpose of discussing and improving the Work, but excluding communication
74 | that is conspicuously marked or otherwise designated in writing by the copyright
75 | owner as "Not a Contribution."
76 |
77 |
78 |
79 | "Contributor" shall mean Licensor and any individual or Legal Entity on behalf
80 | of whom a Contribution has been received by Licensor and subsequently incorporated
81 | within the Work.
82 |
83 | 2. Grant of Copyright License. Subject to the terms and conditions of this
84 | License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
85 | no-charge, royalty-free, irrevocable copyright license to reproduce, prepare
86 | Derivative Works of, publicly display, publicly perform, sublicense, and distribute
87 | the Work and such Derivative Works in Source or Object form.
88 |
89 | 3. Grant of Patent License. Subject to the terms and conditions of this License,
90 | each Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
91 | no-charge, royalty-free, irrevocable (except as stated in this section) patent
92 | license to make, have made, use, offer to sell, sell, import, and otherwise
93 | transfer the Work, where such license applies only to those patent claims
94 | licensable by such Contributor that are necessarily infringed by their Contribution(s)
95 | alone or by combination of their Contribution(s) with the Work to which such
96 | Contribution(s) was submitted. If You institute patent litigation against
97 | any entity (including a cross-claim or counterclaim in a lawsuit) alleging
98 | that the Work or a Contribution incorporated within the Work constitutes direct
99 | or contributory patent infringement, then any patent licenses granted to You
100 | under this License for that Work shall terminate as of the date such litigation
101 | is filed.
102 |
103 | 4. Redistribution. You may reproduce and distribute copies of the Work or
104 | Derivative Works thereof in any medium, with or without modifications, and
105 | in Source or Object form, provided that You meet the following conditions:
106 |
107 | (a) You must give any other recipients of the Work or Derivative Works a copy
108 | of this License; and
109 |
110 | (b) You must cause any modified files to carry prominent notices stating that
111 | You changed the files; and
112 |
113 | (c) You must retain, in the Source form of any Derivative Works that You distribute,
114 | all copyright, patent, trademark, and attribution notices from the Source
115 | form of the Work, excluding those notices that do not pertain to any part
116 | of the Derivative Works; and
117 |
118 | (d) If the Work includes a "NOTICE" text file as part of its distribution,
119 | then any Derivative Works that You distribute must include a readable copy
120 | of the attribution notices contained within such NOTICE file, excluding those
121 | notices that do not pertain to any part of the Derivative Works, in at least
122 | one of the following places: within a NOTICE text file distributed as part
123 | of the Derivative Works; within the Source form or documentation, if provided
124 | along with the Derivative Works; or, within a display generated by the Derivative
125 | Works, if and wherever such third-party notices normally appear. The contents
126 | of the NOTICE file are for informational purposes only and do not modify the
127 | License. You may add Your own attribution notices within Derivative Works
128 | that You distribute, alongside or as an addendum to the NOTICE text from the
129 | Work, provided that such additional attribution notices cannot be construed
130 | as modifying the License.
131 |
132 | You may add Your own copyright statement to Your modifications and may provide
133 | additional or different license terms and conditions for use, reproduction,
134 | or distribution of Your modifications, or for any such Derivative Works as
135 | a whole, provided Your use, reproduction, and distribution of the Work otherwise
136 | complies with the conditions stated in this License.
137 |
138 | 5. Submission of Contributions. Unless You explicitly state otherwise, any
139 | Contribution intentionally submitted for inclusion in the Work by You to the
140 | Licensor shall be under the terms and conditions of this License, without
141 | any additional terms or conditions. Notwithstanding the above, nothing herein
142 | shall supersede or modify the terms of any separate license agreement you
143 | may have executed with Licensor regarding such Contributions.
144 |
145 | 6. Trademarks. This License does not grant permission to use the trade names,
146 | trademarks, service marks, or product names of the Licensor, except as required
147 | for reasonable and customary use in describing the origin of the Work and
148 | reproducing the content of the NOTICE file.
149 |
150 | 7. Disclaimer of Warranty. Unless required by applicable law or agreed to
151 | in writing, Licensor provides the Work (and each Contributor provides its
152 | Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
153 | KIND, either express or implied, including, without limitation, any warranties
154 | or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR
155 | A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness
156 | of using or redistributing the Work and assume any risks associated with Your
157 | exercise of permissions under this License.
158 |
159 | 8. Limitation of Liability. In no event and under no legal theory, whether
160 | in tort (including negligence), contract, or otherwise, unless required by
161 | applicable law (such as deliberate and grossly negligent acts) or agreed to
162 | in writing, shall any Contributor be liable to You for damages, including
163 | any direct, indirect, special, incidental, or consequential damages of any
164 | character arising as a result of this License or out of the use or inability
165 | to use the Work (including but not limited to damages for loss of goodwill,
166 | work stoppage, computer failure or malfunction, or any and all other commercial
167 | damages or losses), even if such Contributor has been advised of the possibility
168 | of such damages.
169 |
170 | 9. Accepting Warranty or Additional Liability. While redistributing the Work
171 | or Derivative Works thereof, You may choose to offer, and charge a fee for,
172 | acceptance of support, warranty, indemnity, or other liability obligations
173 | and/or rights consistent with this License. However, in accepting such obligations,
174 | You may act only on Your own behalf and on Your sole responsibility, not on
175 | behalf of any other Contributor, and only if You agree to indemnify, defend,
176 | and hold each Contributor harmless for any liability incurred by, or claims
177 | asserted against, such Contributor by reason of your accepting any such warranty
178 | or additional liability. END OF TERMS AND CONDITIONS
179 |
180 | APPENDIX: How to apply the Apache License to your work.
181 |
182 | To apply the Apache License to your work, attach the following boilerplate
183 | notice, with the fields enclosed by brackets "[]" replaced with your own identifying
184 | information. (Don't include the brackets!) The text should be enclosed in
185 | the appropriate comment syntax for the file format. We also recommend that
186 | a file or class name and description of purpose be included on the same "printed
187 | page" as the copyright notice for easier identification within third-party
188 | archives.
189 |
190 | Copyright [yyyy] [name of copyright owner]
191 |
192 | Licensed under the Apache License, Version 2.0 (the "License");
193 |
194 | you may not use this file except in compliance with the License.
195 |
196 | You may obtain a copy of the License at
197 |
198 | http://www.apache.org/licenses/LICENSE-2.0
199 |
200 | Unless required by applicable law or agreed to in writing, software
201 |
202 | distributed under the License is distributed on an "AS IS" BASIS,
203 |
204 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
205 |
206 | See the License for the specific language governing permissions and
207 |
208 | limitations under the License.
209 |
--------------------------------------------------------------------------------
/fake-store/src/main/aidl/com/android/vending/billing/IInAppBillingService.aidl:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2012 Google Inc.
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | /*
7 | * Copyright (c) 2012 Google Inc.
8 | *
9 | * Licensed under the Apache License, Version 2.0 (the "License");
10 | * you may not use this file except in compliance with the License.
11 | * You may obtain a copy of the License at
12 | *
13 | * http://www.apache.org/licenses/LICENSE-2.0
14 | *
15 | * Unless required by applicable law or agreed to in writing, software
16 | * distributed under the License is distributed on an "AS IS" BASIS,
17 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 | * See the License for the specific language governing permissions and
19 | * limitations under the License.
20 | */
21 |
22 | package com.android.vending.billing;
23 |
24 | import android.os.Bundle;
25 |
26 | /**
27 | * InAppBillingService is the service that provides in-app billing version 3 and beyond.
28 | * This service provides the following features:
29 | * 1. Provides a new API to get details of in-app items published for the app including
30 | * price, type, title and description.
31 | * 2. The purchase flow is synchronous and purchase information is available immediately
32 | * after it completes.
33 | * 3. Purchase information of in-app purchases is maintained within the Google Play system
34 | * till the purchase is consumed.
35 | * 4. An API to consume a purchase of an inapp item. All purchases of one-time
36 | * in-app items are consumable and thereafter can be purchased again.
37 | * 5. An API to get current purchases of the user immediately. This will not contain any
38 | * consumed purchases.
39 | *
40 | * All calls will give a response code with the following possible values
41 | * RESULT_OK = 0 - success
42 | * RESULT_USER_CANCELED = 1 - User pressed back or canceled a dialog
43 | * RESULT_SERVICE_UNAVAILABLE = 2 - The network connection is down
44 | * RESULT_BILLING_UNAVAILABLE = 3 - This billing API version is not supported for the type requested
45 | * RESULT_ITEM_UNAVAILABLE = 4 - Requested SKU is not available for purchase
46 | * RESULT_DEVELOPER_ERROR = 5 - Invalid arguments provided to the API
47 | * RESULT_ERROR = 6 - Fatal error during the API action
48 | * RESULT_ITEM_ALREADY_OWNED = 7 - Failure to purchase since item is already owned
49 | * RESULT_ITEM_NOT_OWNED = 8 - Failure to consume since item is not owned
50 | */
51 | interface IInAppBillingService {
52 | /**
53 | * Checks support for the requested billing API version, package and in-app type.
54 | * Minimum API version supported by this interface is 3.
55 | * @param apiVersion billing API version that the app is using
56 | * @param packageName the package name of the calling app
57 | * @param type type of the in-app item being purchased ("inapp" for one-time purchases
58 | * and "subs" for subscriptions)
59 | * @return RESULT_OK(0) on success and appropriate response code on failures.
60 | */
61 | int isBillingSupported(int apiVersion, String packageName, String type) = 0;
62 |
63 | /**
64 | * Provides details of a list of SKUs
65 | * Given a list of SKUs of a valid type in the skusBundle, this returns a bundle
66 | * with a list JSON strings containing the productId, price, title and description.
67 | * This API can be called with a maximum of 20 SKUs.
68 | * @param apiVersion billing API version that the app is using
69 | * @param packageName the package name of the calling app
70 | * @param type of the in-app items ("inapp" for one-time purchases
71 | * and "subs" for subscriptions)
72 | * @param skusBundle bundle containing a StringArrayList of SKUs with key "ITEM_ID_LIST"
73 | * @return Bundle containing the following key-value pairs
74 | * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes
75 | * on failures.
76 | * "DETAILS_LIST" with a StringArrayList containing purchase information
77 | * in JSON format similar to:
78 | * '{ "productId" : "exampleSku",
79 | * "type" : "inapp",
80 | * "price" : "$5.00",
81 | * "price_currency": "USD",
82 | * "price_amount_micros": 5000000,
83 | * "title : "Example Title",
84 | * "description" : "This is an example description" }'
85 | */
86 | Bundle getSkuDetails(int apiVersion, String packageName, String type, in Bundle skusBundle) = 1;
87 |
88 | /**
89 | * Returns a pending intent to launch the purchase flow for an in-app item by providing a SKU,
90 | * the type, a unique purchase token and an optional developer payload.
91 | * @param apiVersion billing API version that the app is using
92 | * @param packageName package name of the calling app
93 | * @param sku the SKU of the in-app item as published in the developer console
94 | * @param type of the in-app item being purchased ("inapp" for one-time purchases
95 | * and "subs" for subscriptions)
96 | * @param developerPayload optional argument to be sent back with the purchase information
97 | * @return Bundle containing the following key-value pairs
98 | * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes
99 | * on failures.
100 | * "BUY_INTENT" - PendingIntent to start the purchase flow
101 | *
102 | * The Pending intent should be launched with startIntentSenderForResult. When purchase flow
103 | * has completed, the onActivityResult() will give a resultCode of OK or CANCELED.
104 | * If the purchase is successful, the result data will contain the following key-value pairs
105 | * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response
106 | * codes on failures.
107 | * "INAPP_PURCHASE_DATA" - String in JSON format similar to
108 | * '{"orderId":"12999763169054705758.1371079406387615",
109 | * "packageName":"com.example.app",
110 | * "productId":"exampleSku",
111 | * "purchaseTime":1345678900000,
112 | * "purchaseToken" : "122333444455555",
113 | * "developerPayload":"example developer payload" }'
114 | * "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that
115 | * was signed with the private key of the developer
116 | * TODO: change this to app-specific keys.
117 | */
118 | Bundle getBuyIntent(int apiVersion, String packageName, String sku, String type,
119 | String developerPayload) = 2;
120 |
121 | /**
122 | * Returns the current SKUs owned by the user of the type and package name specified along with
123 | * purchase information and a signature of the data to be validated.
124 | * This will return all SKUs that have been purchased in V3 and managed items purchased using
125 | * V1 and V2 that have not been consumed.
126 | * @param apiVersion billing API version that the app is using
127 | * @param packageName package name of the calling app
128 | * @param type of the in-app items being requested ("inapp" for one-time purchases
129 | * and "subs" for subscriptions)
130 | * @param continuationToken to be set as null for the first call, if the number of owned
131 | * skus are too many, a continuationToken is returned in the response bundle.
132 | * This method can be called again with the continuation token to get the next set of
133 | * owned skus.
134 | * @return Bundle containing the following key-value pairs
135 | * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes
136 | on failures.
137 | * "INAPP_PURCHASE_ITEM_LIST" - StringArrayList containing the list of SKUs
138 | * "INAPP_PURCHASE_DATA_LIST" - StringArrayList containing the purchase information
139 | * "INAPP_DATA_SIGNATURE_LIST"- StringArrayList containing the signatures
140 | * of the purchase information
141 | * "INAPP_CONTINUATION_TOKEN" - String containing a continuation token for the
142 | * next set of in-app purchases. Only set if the
143 | * user has more owned skus than the current list.
144 | */
145 | Bundle getPurchases(int apiVersion, String packageName, String type, String continuationToken) = 3;
146 |
147 | /**
148 | * Consume the last purchase of the given SKU. This will result in this item being removed
149 | * from all subsequent responses to getPurchases() and allow re-purchase of this item.
150 | * @param apiVersion billing API version that the app is using
151 | * @param packageName package name of the calling app
152 | * @param purchaseToken token in the purchase information JSON that identifies the purchase
153 | * to be consumed
154 | * @return RESULT_OK(0) if consumption succeeded, appropriate response codes on failures.
155 | */
156 | int consumePurchase(int apiVersion, String packageName, String purchaseToken) = 4;
157 |
158 | /**
159 | * Returns a pending intent to launch the purchase flow for upgrading or downgrading a
160 | * subscription. The existing owned SKU(s) should be provided along with the new SKU that
161 | * the user is upgrading or downgrading to.
162 | * @param apiVersion billing API version that the app is using, must be 5 or later
163 | * @param packageName package name of the calling app
164 | * @param oldSkus the SKU(s) that the user is upgrading or downgrading from,
165 | * if null or empty this method will behave like {@link #getBuyIntent}
166 | * @param newSku the SKU that the user is upgrading or downgrading to
167 | * @param type of the item being purchased, currently must be "subs"
168 | * @param developerPayload optional argument to be sent back with the purchase information
169 | * @return Bundle containing the following key-value pairs
170 | * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes
171 | * on failures.
172 | * "BUY_INTENT" - PendingIntent to start the purchase flow
173 | *
174 | * The Pending intent should be launched with startIntentSenderForResult. When purchase flow
175 | * has completed, the onActivityResult() will give a resultCode of OK or CANCELED.
176 | * If the purchase is successful, the result data will contain the following key-value pairs
177 | * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response
178 | * codes on failures.
179 | * "INAPP_PURCHASE_DATA" - String in JSON format similar to
180 | * '{"orderId":"12999763169054705758.1371079406387615",
181 | * "packageName":"com.example.app",
182 | * "productId":"exampleSku",
183 | * "purchaseTime":1345678900000,
184 | * "purchaseToken" : "122333444455555",
185 | * "developerPayload":"example developer payload" }'
186 | * "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that
187 | * was signed with the private key of the developer
188 | * TODO: change this to app-specific keys.
189 | */
190 | Bundle getBuyIntentToReplaceSkus(int apiVersion, String packageName,
191 | in List oldSkus, String newSku, String type, String developerPayload) = 6;
192 |
193 | Bundle getBuyIntentV6(int apiVersion, String packageName, String sku, String type, String developerPayload, in Bundle extras) = 7;
194 |
195 | Bundle getPurchasesV6(int apiVersion, String packageName, String type, String continuationToken, in Bundle extras) = 8;
196 |
197 | int isBillingSupportedV7(int apiVersion, String packageName, String type, in Bundle extras) = 9;
198 |
199 | Bundle getPurchasesV9(int apiVersion, String packageName, String type, String continuationToken, in Bundle extras) = 10;
200 |
201 | Bundle consumePurchaseV9(int apiVersion, String packageName, String purchaseToken, in Bundle extras) = 11;
202 |
203 | Bundle getPriceChangeConfirmationIntent(int apiVersion, String packageName, String sku, String type, in Bundle extras) = 800;
204 |
205 | Bundle getSkuDetailsV10(int apiVersion, String packageName, String type, in Bundle skuBundle, in Bundle extras) = 900;
206 |
207 | Bundle acknowledgePurchase(int apiVersion, String packageName, String purchaseToken, in Bundle extras) = 901;
208 | }
209 |
--------------------------------------------------------------------------------
/LICENSES/CC-BY-SA-4.0.txt:
--------------------------------------------------------------------------------
1 | Creative Commons Attribution-ShareAlike 4.0 International Creative Commons
2 | Corporation ("Creative Commons") is not a law firm and does not provide legal
3 | services or legal advice. Distribution of Creative Commons public licenses
4 | does not create a lawyer-client or other relationship. Creative Commons makes
5 | its licenses and related information available on an "as-is" basis. Creative
6 | Commons gives no warranties regarding its licenses, any material licensed
7 | under their terms and conditions, or any related information. Creative Commons
8 | disclaims all liability for damages resulting from their use to the fullest
9 | extent possible.
10 |
11 | Using Creative Commons Public Licenses
12 |
13 | Creative Commons public licenses provide a standard set of terms and conditions
14 | that creators and other rights holders may use to share original works of
15 | authorship and other material subject to copyright and certain other rights
16 | specified in the public license below. The following considerations are for
17 | informational purposes only, are not exhaustive, and do not form part of our
18 | licenses.
19 |
20 | Considerations for licensors: Our public licenses are intended for use by
21 | those authorized to give the public permission to use material in ways otherwise
22 | restricted by copyright and certain other rights. Our licenses are irrevocable.
23 | Licensors should read and understand the terms and conditions of the license
24 | they choose before applying it. Licensors should also secure all rights necessary
25 | before applying our licenses so that the public can reuse the material as
26 | expected. Licensors should clearly mark any material not subject to the license.
27 | This includes other CC-licensed material, or material used under an exception
28 | or limitation to copyright. More considerations for licensors : wiki.creativecommons.org/Considerations_for_licensors
29 |
30 | Considerations for the public: By using one of our public licenses, a licensor
31 | grants the public permission to use the licensed material under specified
32 | terms and conditions. If the licensor's permission is not necessary for any
33 | reason–for example, because of any applicable exception or limitation to copyright–then
34 | that use is not regulated by the license. Our licenses grant only permissions
35 | under copyright and certain other rights that a licensor has authority to
36 | grant. Use of the licensed material may still be restricted for other reasons,
37 | including because others have copyright or other rights in the material. A
38 | licensor may make special requests, such as asking that all changes be marked
39 | or described.
40 |
41 | Although not required by our licenses, you are encouraged to respect those
42 | requests where reasonable. More considerations for the public : wiki.creativecommons.org/Considerations_for_licensees
43 |
44 | Creative Commons Attribution-ShareAlike 4.0 International Public License
45 |
46 | By exercising the Licensed Rights (defined below), You accept and agree to
47 | be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike
48 | 4.0 International Public License ("Public License"). To the extent this Public
49 | License may be interpreted as a contract, You are granted the Licensed Rights
50 | in consideration of Your acceptance of these terms and conditions, and the
51 | Licensor grants You such rights in consideration of benefits the Licensor
52 | receives from making the Licensed Material available under these terms and
53 | conditions.
54 |
55 | Section 1 – Definitions.
56 |
57 | a. Adapted Material means material subject to Copyright and Similar Rights
58 | that is derived from or based upon the Licensed Material and in which the
59 | Licensed Material is translated, altered, arranged, transformed, or otherwise
60 | modified in a manner requiring permission under the Copyright and Similar
61 | Rights held by the Licensor. For purposes of this Public License, where the
62 | Licensed Material is a musical work, performance, or sound recording, Adapted
63 | Material is always produced where the Licensed Material is synched in timed
64 | relation with a moving image.
65 |
66 | b. Adapter's License means the license You apply to Your Copyright and Similar
67 | Rights in Your contributions to Adapted Material in accordance with the terms
68 | and conditions of this Public License.
69 |
70 | c. BY-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses,
71 | approved by Creative Commons as essentially the equivalent of this Public
72 | License.
73 |
74 | d. Copyright and Similar Rights means copyright and/or similar rights closely
75 | related to copyright including, without limitation, performance, broadcast,
76 | sound recording, and Sui Generis Database Rights, without regard to how the
77 | rights are labeled or categorized. For purposes of this Public License, the
78 | rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
79 |
80 | e. Effective Technological Measures means those measures that, in the absence
81 | of proper authority, may not be circumvented under laws fulfilling obligations
82 | under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996,
83 | and/or similar international agreements.
84 |
85 | f. Exceptions and Limitations means fair use, fair dealing, and/or any other
86 | exception or limitation to Copyright and Similar Rights that applies to Your
87 | use of the Licensed Material.
88 |
89 | g. License Elements means the license attributes listed in the name of a Creative
90 | Commons Public License. The License Elements of this Public License are Attribution
91 | and ShareAlike.
92 |
93 | h. Licensed Material means the artistic or literary work, database, or other
94 | material to which the Licensor applied this Public License.
95 |
96 | i. Licensed Rights means the rights granted to You subject to the terms and
97 | conditions of this Public License, which are limited to all Copyright and
98 | Similar Rights that apply to Your use of the Licensed Material and that the
99 | Licensor has authority to license.
100 |
101 | j. Licensor means the individual(s) or entity(ies) granting rights under this
102 | Public License.
103 |
104 | k. Share means to provide material to the public by any means or process that
105 | requires permission under the Licensed Rights, such as reproduction, public
106 | display, public performance, distribution, dissemination, communication, or
107 | importation, and to make material available to the public including in ways
108 | that members of the public may access the material from a place and at a time
109 | individually chosen by them.
110 |
111 | l. Sui Generis Database Rights means rights other than copyright resulting
112 | from Directive 96/9/EC of the European Parliament and of the Council of 11
113 | March 1996 on the legal protection of databases, as amended and/or succeeded,
114 | as well as other essentially equivalent rights anywhere in the world.
115 |
116 | m. You means the individual or entity exercising the Licensed Rights under
117 | this Public License. Your has a corresponding meaning.
118 |
119 | Section 2 – Scope.
120 |
121 | a. License grant.
122 |
123 | 1. Subject to the terms and conditions of this Public License, the Licensor
124 | hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive,
125 | irrevocable license to exercise the Licensed Rights in the Licensed Material
126 | to:
127 |
128 | A. reproduce and Share the Licensed Material, in whole or in part; and
129 |
130 | B. produce, reproduce, and Share Adapted Material.
131 |
132 | 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions
133 | and Limitations apply to Your use, this Public License does not apply, and
134 | You do not need to comply with its terms and conditions.
135 |
136 | 3. Term. The term of this Public License is specified in Section 6(a).
137 |
138 | 4. Media and formats; technical modifications allowed. The Licensor authorizes
139 | You to exercise the Licensed Rights in all media and formats whether now known
140 | or hereafter created, and to make technical modifications necessary to do
141 | so. The Licensor waives and/or agrees not to assert any right or authority
142 | to forbid You from making technical modifications necessary to exercise the
143 | Licensed Rights, including technical modifications necessary to circumvent
144 | Effective Technological Measures. For purposes of this Public License, simply
145 | making modifications authorized by this Section 2(a)(4) never produces Adapted
146 | Material.
147 |
148 | 5. Downstream recipients.
149 |
150 | A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed
151 | Material automatically receives an offer from the Licensor to exercise the
152 | Licensed Rights under the terms and conditions of this Public License.
153 |
154 | B. Additional offer from the Licensor – Adapted Material. Every recipient
155 | of Adapted Material from You automatically receives an offer from the Licensor
156 | to exercise the Licensed Rights in the Adapted Material under the conditions
157 | of the Adapter's License You apply.
158 |
159 | C. No downstream restrictions. You may not offer or impose any additional
160 | or different terms or conditions on, or apply any Effective Technological
161 | Measures to, the Licensed Material if doing so restricts exercise of the Licensed
162 | Rights by any recipient of the Licensed Material.
163 |
164 | 6. No endorsement. Nothing in this Public License constitutes or may be construed
165 | as permission to assert or imply that You are, or that Your use of the Licensed
166 | Material is, connected with, or sponsored, endorsed, or granted official status
167 | by, the Licensor or others designated to receive attribution as provided in
168 | Section 3(a)(1)(A)(i).
169 |
170 | b. Other rights.
171 |
172 | 1. Moral rights, such as the right of integrity, are not licensed under this
173 | Public License, nor are publicity, privacy, and/or other similar personality
174 | rights; however, to the extent possible, the Licensor waives and/or agrees
175 | not to assert any such rights held by the Licensor to the limited extent necessary
176 | to allow You to exercise the Licensed Rights, but not otherwise.
177 |
178 | 2. Patent and trademark rights are not licensed under this Public License.
179 |
180 | 3. To the extent possible, the Licensor waives any right to collect royalties
181 | from You for the exercise of the Licensed Rights, whether directly or through
182 | a collecting society under any voluntary or waivable statutory or compulsory
183 | licensing scheme. In all other cases the Licensor expressly reserves any right
184 | to collect such royalties.
185 |
186 | Section 3 – License Conditions.
187 |
188 | Your exercise of the Licensed Rights is expressly made subject to the following
189 | conditions.
190 |
191 | a. Attribution.
192 |
193 | 1. If You Share the Licensed Material (including in modified form), You must:
194 |
195 | A. retain the following if it is supplied by the Licensor with the Licensed
196 | Material:
197 |
198 | i. identification of the creator(s) of the Licensed Material and any others
199 | designated to receive attribution, in any reasonable manner requested by the
200 | Licensor (including by pseudonym if designated);
201 |
202 | ii. a copyright notice;
203 |
204 | iii. a notice that refers to this Public License;
205 |
206 | iv. a notice that refers to the disclaimer of warranties;
207 |
208 | v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
209 |
210 | B. indicate if You modified the Licensed Material and retain an indication
211 | of any previous modifications; and
212 |
213 | C. indicate the Licensed Material is licensed under this Public License, and
214 | include the text of, or the URI or hyperlink to, this Public License.
215 |
216 | 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner
217 | based on the medium, means, and context in which You Share the Licensed Material.
218 | For example, it may be reasonable to satisfy the conditions by providing a
219 | URI or hyperlink to a resource that includes the required information.
220 |
221 | 3. If requested by the Licensor, You must remove any of the information required
222 | by Section 3(a)(1)(A) to the extent reasonably practicable.
223 |
224 | b. ShareAlike.In addition to the conditions in Section 3(a), if You Share
225 | Adapted Material You produce, the following conditions also apply.
226 |
227 | 1. The Adapter's License You apply must be a Creative Commons license with
228 | the same License Elements, this version or later, or a BY-SA Compatible License.
229 |
230 | 2. You must include the text of, or the URI or hyperlink to, the Adapter's
231 | License You apply. You may satisfy this condition in any reasonable manner
232 | based on the medium, means, and context in which You Share Adapted Material.
233 |
234 | 3. You may not offer or impose any additional or different terms or conditions
235 | on, or apply any Effective Technological Measures to, Adapted Material that
236 | restrict exercise of the rights granted under the Adapter's License You apply.
237 |
238 | Section 4 – Sui Generis Database Rights.
239 |
240 | Where the Licensed Rights include Sui Generis Database Rights that apply to
241 | Your use of the Licensed Material:
242 |
243 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract,
244 | reuse, reproduce, and Share all or a substantial portion of the contents of
245 | the database;
246 |
247 | b. if You include all or a substantial portion of the database contents in
248 | a database in which You have Sui Generis Database Rights, then the database
249 | in which You have Sui Generis Database Rights (but not its individual contents)
250 | is Adapted Material, including for purposes of Section 3(b); and
251 |
252 | c. You must comply with the conditions in Section 3(a) if You Share all or
253 | a substantial portion of the contents of the database.
254 |
255 | For the avoidance of doubt, this Section 4 supplements and does not replace
256 | Your obligations under this Public License where the Licensed Rights include
257 | other Copyright and Similar Rights.
258 |
259 | Section 5 – Disclaimer of Warranties and Limitation of Liability.
260 |
261 | a. Unless otherwise separately undertaken by the Licensor, to the extent possible,
262 | the Licensor offers the Licensed Material as-is and as-available, and makes
263 | no representations or warranties of any kind concerning the Licensed Material,
264 | whether express, implied, statutory, or other. This includes, without limitation,
265 | warranties of title, merchantability, fitness for a particular purpose, non-infringement,
266 | absence of latent or other defects, accuracy, or the presence or absence of
267 | errors, whether or not known or discoverable. Where disclaimers of warranties
268 | are not allowed in full or in part, this disclaimer may not apply to You.
269 |
270 | b. To the extent possible, in no event will the Licensor be liable to You
271 | on any legal theory (including, without limitation, negligence) or otherwise
272 | for any direct, special, indirect, incidental, consequential, punitive, exemplary,
273 | or other losses, costs, expenses, or damages arising out of this Public License
274 | or use of the Licensed Material, even if the Licensor has been advised of
275 | the possibility of such losses, costs, expenses, or damages. Where a limitation
276 | of liability is not allowed in full or in part, this limitation may not apply
277 | to You.
278 |
279 | c. The disclaimer of warranties and limitation of liability provided above
280 | shall be interpreted in a manner that, to the extent possible, most closely
281 | approximates an absolute disclaimer and waiver of all liability.
282 |
283 | Section 6 – Term and Termination.
284 |
285 | a. This Public License applies for the term of the Copyright and Similar Rights
286 | licensed here. However, if You fail to comply with this Public License, then
287 | Your rights under this Public License terminate automatically.
288 |
289 | b. Where Your right to use the Licensed Material has terminated under Section
290 | 6(a), it reinstates:
291 |
292 | 1. automatically as of the date the violation is cured, provided it is cured
293 | within 30 days of Your discovery of the violation; or
294 |
295 | 2. upon express reinstatement by the Licensor.
296 |
297 | c. For the avoidance of doubt, this Section 6(b) does not affect any right
298 | the Licensor may have to seek remedies for Your violations of this Public
299 | License.
300 |
301 | d. For the avoidance of doubt, the Licensor may also offer the Licensed Material
302 | under separate terms or conditions or stop distributing the Licensed Material
303 | at any time; however, doing so will not terminate this Public License.
304 |
305 | e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
306 |
307 | Section 7 – Other Terms and Conditions.
308 |
309 | a. The Licensor shall not be bound by any additional or different terms or
310 | conditions communicated by You unless expressly agreed.
311 |
312 | b. Any arrangements, understandings, or agreements regarding the Licensed
313 | Material not stated herein are separate from and independent of the terms
314 | and conditions of this Public License.
315 |
316 | Section 8 – Interpretation.
317 |
318 | a. For the avoidance of doubt, this Public License does not, and shall not
319 | be interpreted to, reduce, limit, restrict, or impose conditions on any use
320 | of the Licensed Material that could lawfully be made without permission under
321 | this Public License.
322 |
323 | b. To the extent possible, if any provision of this Public License is deemed
324 | unenforceable, it shall be automatically reformed to the minimum extent necessary
325 | to make it enforceable. If the provision cannot be reformed, it shall be severed
326 | from this Public License without affecting the enforceability of the remaining
327 | terms and conditions.
328 |
329 | c. No term or condition of this Public License will be waived and no failure
330 | to comply consented to unless expressly agreed to by the Licensor.
331 |
332 | d. Nothing in this Public License constitutes or may be interpreted as a limitation
333 | upon, or waiver of, any privileges and immunities that apply to the Licensor
334 | or You, including from the legal processes of any jurisdiction or authority.
335 |
336 | Creative Commons is not a party to its public licenses. Notwithstanding, Creative
337 | Commons may elect to apply one of its public licenses to material it publishes
338 | and in those instances will be considered the "Licensor." The text of the
339 | Creative Commons public licenses is dedicated to the public domain under the
340 | CC0 Public Domain Dedication. Except for the limited purpose of indicating
341 | that material is shared under a Creative Commons public license or as otherwise
342 | permitted by the Creative Commons policies published at creativecommons.org/policies,
343 | Creative Commons does not authorize the use of the trademark "Creative Commons"
344 | or any other trademark or logo of Creative Commons without its prior written
345 | consent including, without limitation, in connection with any unauthorized
346 | modifications to any of its public licenses or any other arrangements, understandings,
347 | or agreements concerning use of licensed material. For the avoidance of doubt,
348 | this paragraph does not form part of the public licenses.
349 |
350 | Creative Commons may be contacted at creativecommons.org.
351 |
--------------------------------------------------------------------------------
/fake-signature/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
17 |
18 |
21 |
22 |
25 |
28 |
31 |
34 |
37 |
40 |
43 |
46 |
49 |
52 |
55 |
58 |
61 |
64 |
67 |
70 |
73 |
76 |
79 |
82 |
85 |
88 |
91 |
94 |
97 |
100 |
103 |
106 |
109 |
112 |
115 |
118 |
121 |
124 |
127 |
130 |
133 |
136 |
139 |
142 |
145 |
148 |
151 |
154 |
157 |
160 |
163 |
166 |
169 |
172 |
175 |
178 |
181 |
184 |
187 |
190 |
193 |
196 |
199 |
202 |
205 |
208 |
211 |
214 |
217 |
220 |
223 |
226 |
229 |
232 |
235 |
238 |
241 |
244 |
247 |
250 |
253 |
256 |
259 |
262 |
265 |
268 |
271 |
274 |
277 |
280 |
283 |
286 |
289 |
292 |
295 |
298 |
301 |
304 |
307 |
310 |
313 |
316 |
319 |
322 |
325 |
328 |
331 |
334 |
337 |
340 |
343 |
346 |
349 |
352 |
355 |
358 |
361 |
364 |
367 |
370 |
373 |
376 |
379 |
382 |
385 |
388 |
391 |
394 |
397 |
400 |
403 |
406 |
409 |
412 |
415 |
418 |
421 |
424 |
427 |
430 |
433 |
436 |
439 |
442 |
445 |
448 |
451 |
454 |
457 |
460 |
463 |
466 |
469 |
472 |
475 |
478 |
481 |
484 |
487 |
490 |
493 |
496 |
499 |
502 |
505 |
508 |
511 |
514 |
517 |
520 |
523 |
526 |
529 |
532 |
535 |
538 |
541 |
544 |
547 |
550 |
553 |
556 |
559 |
562 |
565 |
568 |
571 |
574 |
577 |
580 |
583 |
586 |
589 |
592 |
595 |
598 |
601 |
604 |
607 |
610 |
613 |
616 |
619 |
622 |
625 |
628 |
631 |
634 |
637 |
640 |
643 |
646 |
649 |
652 |
655 |
658 |
661 |
664 |
667 |
670 |
673 |
676 |
679 |
682 |
685 |
688 |
691 |
694 |
697 |
700 |
703 |
706 |
709 |
712 |
715 |
718 |
721 |
724 |
727 |
730 |
733 |
736 |
739 |
742 |
745 |
748 |
751 |
754 |
757 |
760 |
763 |
766 |
769 |
772 |
775 |
778 |
781 |
784 |
787 |
790 |
793 |
796 |
799 |
802 |
805 |
808 |
811 |
814 |
817 |
820 |
823 |
826 |
829 |
832 |
835 |
838 |
841 |
844 |
847 |
850 |
853 |
856 |
859 |
862 |
865 |
868 |
871 |
874 |
877 |
880 |
883 |
886 |
889 |
892 |
895 |
898 |
901 |
904 |
907 |
910 |
913 |
916 |
919 |
922 |
925 |
928 |
931 |
934 |
937 |
940 |
943 |
946 |
949 |
952 |
955 |
958 |
961 |
964 |
967 |
970 |
973 |
976 |
979 |
982 |
985 |
988 |
991 |
994 |
997 |
1000 |
1003 |
1006 |
1009 |
1012 |
1015 |
1018 |
1021 |
1024 |
1027 |
1030 |
1033 |
1036 |
1039 |
1042 |
1045 |
1048 |
1051 |
1054 |
1057 |
1060 |
1063 |
1066 |
1069 |
1072 |
1075 |
1078 |
1081 |
1084 |
1087 |
1090 |
1093 |
1096 |
1099 |
1102 |
1105 |
1108 |
1111 |
1114 |
1117 |
1120 |
1123 |
1126 |
1129 |
1132 |
1135 |
1138 |
1141 |
1144 |
1147 |
1150 |
1153 |
1154 |
1157 |
1158 |
1162 |
1163 |
1164 |
1165 |
1166 |
1167 |
1168 |
1169 |
1170 |
1171 |
1177 |
1178 |
1182 |
1183 |
1184 |
1185 |
1186 |
1187 |
1188 |
1189 |
1190 |
--------------------------------------------------------------------------------