└── app
├── src
└── main
│ ├── ic_launcher-playstore.png
│ ├── res
│ ├── font
│ │ ├── raleway_light.ttf
│ │ ├── raleway_medium.ttf
│ │ └── raleway_semibold.ttf
│ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_round.png
│ │ └── ic_launcher_foreground.png
│ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_round.png
│ │ └── ic_launcher_foreground.png
│ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_round.png
│ │ └── ic_launcher_foreground.png
│ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_round.png
│ │ └── ic_launcher_foreground.png
│ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_round.png
│ │ └── ic_launcher_foreground.png
│ ├── values
│ │ ├── ic_launcher_background.xml
│ │ ├── dimens.xml
│ │ ├── themes.xml
│ │ ├── colors.xml
│ │ └── styles.xml
│ ├── menu
│ │ ├── payment_activity_menu.xml
│ │ └── menu.xml
│ ├── anim
│ │ └── shake.xml
│ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ ├── xml
│ │ └── paths.xml
│ ├── values-night
│ │ ├── colors.xml
│ │ └── themes.xml
│ ├── drawable
│ │ ├── dialog_background.xml
│ │ ├── bottom_sheet_bg.xml
│ │ ├── gradient_background_download_remainings.xml
│ │ ├── button_background.xml
│ │ ├── ic_launcher_foreground.xml
│ │ └── ic_launcher_background.xml
│ ├── layout
│ │ ├── header.xml
│ │ ├── dialog_layout.xml
│ │ ├── code_input.xml
│ │ ├── activity_transfer_license.xml
│ │ ├── activity_about_payment.xml
│ │ └── activity_main.xml
│ ├── drawable-v24
│ │ └── ic_launcher_foreground.xml
│ ├── values-zh-rTW
│ │ └── strings.xml
│ ├── values-ja-rJP
│ │ └── strings.xml
│ ├── values-ko-rKR
│ │ └── strings.xml
│ ├── values-vi-rVN
│ │ └── strings.xml
│ ├── values-cs-rCZ
│ │ └── strings.xml
│ ├── values-ca-rES
│ │ └── strings.xml
│ ├── values-da-rDK
│ │ └── strings.xml
│ ├── values-de-rDE
│ │ └── strings.xml
│ ├── values-fi-rFI
│ │ └── strings.xml
│ ├── values-hu-rHU
│ │ └── strings.xml
│ ├── values-no-rNO
│ │ └── strings.xml
│ ├── values-pt-rBR
│ │ └── strings.xml
│ ├── values-sq-rAL
│ │ └── strings.xml
│ ├── values-sv-rSE
│ │ └── strings.xml
│ ├── values-pt-rPT
│ │ └── strings.xml
│ ├── values-hr-rHR
│ │ └── strings.xml
│ ├── values-sr-rSP
│ │ └── strings.xml
│ └── values-iw-rIL
│ │ └── strings.xml
│ ├── java
│ └── com
│ │ └── legs
│ │ └── appsforaa
│ │ ├── User.java
│ │ ├── utils
│ │ ├── Version.java
│ │ └── UtilsLibrary.java
│ │ ├── GitHubDownloader.java
│ │ ├── AboutDialog.java
│ │ ├── ContactDialog.java
│ │ ├── Downloader.java
│ │ ├── EnterProCode.java
│ │ └── AboutPaymentActivity.kt
│ └── AndroidManifest.xml
└── build.gradle
/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/app/src/main/res/font/raleway_light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/font/raleway_light.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/raleway_medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/font/raleway_medium.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/raleway_semibold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/font/raleway_semibold.ttf
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zacharee/AAAD/main/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/values/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #323133
4 |
--------------------------------------------------------------------------------
/app/src/main/java/com/legs/appsforaa/User.java:
--------------------------------------------------------------------------------
1 | package com.legs.appsforaa;
2 |
3 | class User {
4 |
5 |
6 | public User(boolean b) {
7 | }
8 |
9 |
10 | boolean activated;
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/payment_activity_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/shake.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | #ffFFFFFF
5 |
6 | @android:color/background_light
7 | @android:color/background_dark
8 |
9 | #1E1E1E
10 | #2C2C2C
11 | #3C3C3C
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/dialog_background.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 | 0dp
8 |
9 |
14 | 5dp
15 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/header.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bottom_sheet_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
6 |
7 |
8 |
9 |
10 | -
13 |
15 |
16 |
19 |
20 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/gradient_background_download_remainings.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | -
5 |
6 |
7 |
8 |
9 |
10 | -
11 |
12 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | -
5 |
6 |
7 |
8 |
9 |
10 |
11 | -
12 |
13 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
11 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
11 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFBB86FC
4 | #FF6200EE
5 | #FF3700B3
6 | #FF03DAC5
7 | #FF018786
8 | #FF000000
9 | #FFFFFFFF
10 |
11 | #008577
12 | #00574B
13 | #D81B60
14 |
15 | #ff000000
16 |
17 | @android:color/background_light
18 | @android:color/background_dark
19 |
20 | #ECECEC
21 | #E4E4E4
22 | #E8E8E8
23 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
12 |
13 |
14 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/code_input.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
15 |
16 |
25 |
26 |
35 |
36 |
--------------------------------------------------------------------------------
/app/src/main/java/com/legs/appsforaa/utils/Version.java:
--------------------------------------------------------------------------------
1 | package com.legs.appsforaa.utils;
2 |
3 | public class Version implements Comparable {
4 |
5 | private String version;
6 |
7 | public final String get() {
8 | return this.version;
9 | }
10 |
11 | public Version(String version) {
12 | if(version == null)
13 | throw new IllegalArgumentException("Version can not be null");
14 | if(!version.matches("[0-9]+(\\.[0-9]+)*"))
15 | throw new IllegalArgumentException("Invalid version format");
16 | this.version = version;
17 | }
18 |
19 | @Override public int compareTo(Version that) {
20 | if(that == null)
21 | return 1;
22 | String[] thisParts = this.get().split("\\.");
23 | String[] thatParts = that.get().split("\\.");
24 | int length = Math.max(thisParts.length, thatParts.length);
25 | for(int i = 0; i < length; i++) {
26 | int thisPart = i < thisParts.length ?
27 | Integer.parseInt(thisParts[i]) : 0;
28 | int thatPart = i < thatParts.length ?
29 | Integer.parseInt(thatParts[i]) : 0;
30 | if(thisPart < thatPart)
31 | return -1;
32 | if(thisPart > thatPart)
33 | return 1;
34 | }
35 | return 0;
36 | }
37 |
38 | @Override public boolean equals(Object that) {
39 | if(this == that)
40 | return true;
41 | if(that == null)
42 | return false;
43 | if(this.getClass() != that.getClass())
44 | return false;
45 | return this.compareTo((Version) that) == 0;
46 | }
47 |
48 | }
49 |
--------------------------------------------------------------------------------
/app/src/main/java/com/legs/appsforaa/GitHubDownloader.java:
--------------------------------------------------------------------------------
1 | package com.legs.appsforaa;
2 |
3 | import android.os.StrictMode;
4 |
5 | import java.io.DataInputStream;
6 | import java.io.DataOutputStream;
7 | import java.io.File;
8 | import java.io.FileOutputStream;
9 | import java.io.IOException;
10 | import java.net.URL;
11 | import java.net.URLConnection;
12 |
13 | public class GitHubDownloader implements Runnable{
14 |
15 |
16 | MainActivity mainActivity;
17 | File file;
18 | String url;
19 |
20 | public void setScreen2auto(Boolean screen2auto) {
21 | this.screen2auto = screen2auto;
22 | }
23 |
24 | Boolean screen2auto;
25 |
26 | public GitHubDownloader(MainActivity mainActivity, File file, String url) {
27 | this.mainActivity = mainActivity;
28 | this.file = file;
29 | this.url = url;
30 | this.screen2auto = false;
31 | }
32 |
33 |
34 |
35 | @Override
36 | public void run() {
37 | try {
38 | StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
39 | StrictMode.setThreadPolicy(policy);
40 |
41 | URL u = new URL (this.url);
42 | URLConnection conn = u.openConnection();
43 |
44 | int contentLenght = conn.getContentLength();
45 |
46 | DataInputStream stream = new DataInputStream(u.openStream());
47 |
48 | byte[] buffer = new byte[contentLenght];
49 | stream.readFully(buffer);
50 | stream.close();
51 |
52 | DataOutputStream fos = new DataOutputStream(new FileOutputStream(this.file));
53 | fos.write(buffer);
54 | fos.flush();
55 | fos.close();
56 |
57 | } catch (IOException e) {
58 | e.printStackTrace();
59 | } finally {
60 | this.mainActivity.installAPK(this.file);
61 | }
62 | }
63 |
64 | }
65 |
--------------------------------------------------------------------------------
/app/src/main/java/com/legs/appsforaa/AboutDialog.java:
--------------------------------------------------------------------------------
1 | package com.legs.appsforaa;
2 |
3 | import android.app.Dialog;
4 | import android.content.DialogInterface;
5 | import android.os.Bundle;
6 | import android.text.Html;
7 | import android.text.method.LinkMovementMethod;
8 | import android.widget.TextView;
9 |
10 | import androidx.appcompat.app.AlertDialog;
11 | import androidx.fragment.app.DialogFragment;
12 |
13 |
14 | public class AboutDialog extends DialogFragment {
15 |
16 | @Override
17 | public Dialog onCreateDialog(Bundle savedInstanceState) {
18 | final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
19 |
20 | final String deviceId = getArguments().getString("did");
21 |
22 | builder.setMessage(Html.fromHtml(getString(R.string.about_part_one) + getString(R.string.about_part_three) + getString(R.string.about_part_two) + "\nDID " + deviceId));
23 | builder.setCancelable(true);
24 | builder.setPositiveButton(getString(android.R.string.ok), new DialogInterface.OnClickListener() {
25 | @Override
26 | public void onClick(DialogInterface dialog, int which) {
27 | }
28 | });
29 |
30 | builder.setNegativeButton(getString(R.string.privacy), new DialogInterface.OnClickListener() {
31 | @Override
32 | public void onClick(DialogInterface dialog, int which) {
33 | builder.setMessage(Html.fromHtml(getString(R.string.privacy_policy)));
34 | builder.setNegativeButton(null, null);
35 | AlertDialog Alert = builder.create();
36 | Alert.show();
37 |
38 | }
39 | });
40 |
41 | AlertDialog Alert = builder.create();
42 | Alert.show();
43 | ((TextView)Alert.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
44 | return Alert;
45 | }
46 |
47 |
48 | }
49 |
--------------------------------------------------------------------------------
/app/src/main/java/com/legs/appsforaa/ContactDialog.java:
--------------------------------------------------------------------------------
1 | package com.legs.appsforaa;
2 |
3 | import android.app.Dialog;
4 | import android.content.DialogInterface;
5 | import android.content.Intent;
6 | import android.net.Uri;
7 | import android.os.Bundle;
8 | import android.text.method.LinkMovementMethod;
9 | import android.widget.TextView;
10 |
11 | import androidx.appcompat.app.AlertDialog;
12 | import androidx.fragment.app.DialogFragment;
13 |
14 |
15 | public class ContactDialog extends DialogFragment {
16 |
17 | @Override
18 | public Dialog onCreateDialog(Bundle savedInstanceState) {
19 | final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
20 |
21 | builder.setMessage(getString(R.string.help_dialog));
22 | builder.setCancelable(true);
23 | builder.setPositiveButton(getString(android.R.string.ok), new DialogInterface.OnClickListener() {
24 | @Override
25 | public void onClick(DialogInterface dialog, int which) {
26 | Intent intent = new Intent(Intent.ACTION_SENDTO);
27 | intent.setData(Uri.parse("mailto:")); // only email apps should handle this
28 | intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "help.aaad@gmail.com" });
29 | intent.putExtra(Intent.EXTRA_SUBJECT, "HELP");
30 | startActivity(intent);
31 |
32 | }
33 | });
34 |
35 | builder.setNegativeButton(getString(android.R.string.no), new DialogInterface.OnClickListener() {
36 | @Override
37 | public void onClick(DialogInterface dialog, int which) {
38 | dialog.dismiss();
39 | }
40 | });
41 |
42 | AlertDialog Alert = builder.create();
43 | Alert.show();
44 | ((TextView)Alert.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
45 | return Alert;
46 | }
47 |
48 |
49 | }
50 |
--------------------------------------------------------------------------------
/app/src/main/java/com/legs/appsforaa/utils/UtilsLibrary.java:
--------------------------------------------------------------------------------
1 | package com.legs.appsforaa.utils;
2 |
3 | import android.annotation.TargetApi;
4 | import android.content.Context;
5 | import android.content.res.ColorStateList;
6 | import android.graphics.Color;
7 | import android.graphics.drawable.Drawable;
8 | import android.graphics.drawable.GradientDrawable;
9 | import android.graphics.drawable.RippleDrawable;
10 | import android.os.Build;
11 | import android.util.TypedValue;
12 |
13 | import androidx.annotation.NonNull;
14 |
15 | public class UtilsLibrary {
16 |
17 | static int dpToPixels(Context context, int dp) {
18 | final float scale = context.getResources().getDisplayMetrics().density;
19 | return (int) (dp * scale + 0.5f);
20 | }
21 |
22 | static Drawable createButtonBackgroundDrawable(@NonNull Context context, int fillColor) {
23 | int buttonCornerRadius = dpToPixels(context, 2);
24 | TypedValue v = new TypedValue();
25 | boolean hasAttribute = context.getTheme().resolveAttribute(com.github.javiersantos.bottomdialogs.R.attr.colorControlHighlight, v, true);
26 | int rippleColor = hasAttribute ? v.data : Color.parseColor("#88CCCCCC");
27 | return createButtonBackgroundDrawableLollipop(fillColor, rippleColor, buttonCornerRadius);
28 | }
29 |
30 | @TargetApi(Build.VERSION_CODES.LOLLIPOP)
31 | private static Drawable createButtonBackgroundDrawableLollipop(int fillColor, int rippleColor,int cornerRadius) {
32 | Drawable d = createButtonBackgroundDrawableBase(fillColor, cornerRadius);
33 | return new RippleDrawable(ColorStateList.valueOf(rippleColor), d, null);
34 | }
35 |
36 | private static Drawable createButtonBackgroundDrawableBase(int color, int cornerRadius) {
37 | GradientDrawable d = new GradientDrawable();
38 | d.setShape(GradientDrawable.RECTANGLE);
39 | d.setCornerRadius(cornerRadius);
40 | d.setColor(color);
41 | return d;
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/app/src/main/java/com/legs/appsforaa/Downloader.java:
--------------------------------------------------------------------------------
1 | package com.legs.appsforaa;
2 |
3 | import android.os.StrictMode;
4 |
5 | import java.io.File;
6 | import java.io.FileNotFoundException;
7 | import java.io.FileOutputStream;
8 | import java.io.IOException;
9 | import java.net.MalformedURLException;
10 |
11 | import okhttp3.OkHttpClient;
12 | import okhttp3.Request;
13 | import okhttp3.Response;
14 |
15 | public class Downloader implements Runnable{
16 |
17 |
18 | MainActivity mainActivity;
19 | File file;
20 | String url;
21 |
22 | public void setScreen2auto(Boolean screen2auto) {
23 | this.screen2auto = screen2auto;
24 | }
25 |
26 | Boolean screen2auto;
27 |
28 | public Downloader(MainActivity mainActivity, File file, String url) {
29 | this.mainActivity = mainActivity;
30 | this.file = file;
31 | this.url = url;
32 | this.screen2auto = false;
33 | }
34 |
35 |
36 |
37 | @Override
38 | public void run() {
39 | try {
40 | StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
41 | StrictMode.setThreadPolicy(policy);
42 |
43 | Request request;
44 |
45 | OkHttpClient client = new OkHttpClient();
46 | if (this.screen2auto) {
47 | request = new Request.Builder().url(this.url).addHeader("REFERER", "https://inceptive.ru").build();
48 |
49 | } else {
50 | request = new Request.Builder().url(this.url).build();
51 | }
52 |
53 | Response response = client.newCall(request).execute();
54 | if (!response.isSuccessful()) {
55 | throw new IOException("Failed to download file: " + response);
56 | }
57 | FileOutputStream fos = new FileOutputStream(this.file);
58 | fos.write(response.body().bytes());
59 | fos.close();
60 |
61 | } catch (FileNotFoundException e) {
62 | e.printStackTrace();
63 | } catch (MalformedURLException e) {
64 | e.printStackTrace();
65 | } catch (IOException e) {
66 | e.printStackTrace();
67 | } finally {
68 | this.mainActivity.installAPK(this.file);
69 |
70 | }
71 | }
72 |
73 | }
74 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_transfer_license.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
20 |
21 |
32 |
33 |
41 |
42 |
52 |
53 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
12 |
13 |
18 |
19 |
20 |
27 |
28 |
32 |
33 |
38 |
39 |
40 |
44 |
45 |
48 |
49 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_about_payment.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
19 |
20 |
31 |
32 |
44 |
45 |
53 |
54 |
60 |
61 |
70 |
71 |
72 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
14 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
32 |
33 |
37 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
54 |
55 |
56 |
57 |
58 |
63 |
64 |
65 |
69 |
70 |
75 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id 'com.android.application'
3 | id 'kotlin-android'
4 | id 'kotlin-android-extensions'
5 | id 'com.google.gms.google-services'
6 | }
7 |
8 | allprojects {
9 | repositories {
10 | maven {
11 | url 'https://jitpack.io'
12 | }
13 | mavenCentral()
14 | }
15 | }
16 |
17 | android {
18 |
19 | packagingOptions {
20 | exclude 'META-INF/DEPENDENCIES'
21 | exclude 'META-INF/LICENSE'
22 | exclude 'META-INF/LICENSE.txt'
23 | exclude 'META-INF/license.txt'
24 | exclude 'META-INF/NOTICE'
25 | exclude 'META-INF/NOTICE.txt'
26 | exclude 'META-INF/notice.txt'
27 | exclude 'META-INF/ASL2.0'
28 | exclude("META-INF/*.kotlin_module")
29 | }
30 |
31 | def localProperties = new Properties()
32 | localProperties.load(new FileInputStream(rootProject.file("local.properties")))
33 |
34 | buildFeatures {
35 | viewBinding true
36 | }
37 |
38 | signingConfigs {
39 | nuova {
40 | storeFile file(localProperties['STORELOCATION'])
41 | storePassword localProperties['STOREPASSWORD']
42 | keyAlias 'key3'
43 | keyPassword localProperties['KEYPASSWORD']
44 | }
45 | }
46 |
47 |
48 |
49 |
50 |
51 | compileSdkVersion 30
52 | buildToolsVersion "30.0.3"
53 |
54 | defaultConfig {
55 |
56 | localProperties.load(new FileInputStream(rootProject.file("local.properties")))
57 |
58 | applicationId "sksa.aa.customapps"
59 | minSdkVersion 23
60 | targetSdkVersion 30
61 | versionCode 7
62 | versionName "1.4"
63 | signingConfig signingConfigs.'nuova'
64 | setProperty("archivesBaseName","AAAD-" + versionName)
65 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
66 |
67 | buildConfigField "String", "PAYPAL_ID" , localProperties['PAYPAL_ID']
68 | buildConfigField "String", "PAYPAL_ID_PROMO", localProperties['PAYPAL_ID_PROMO']
69 | buildConfigField "String", "FIREBASE_INSTANCE", localProperties['FIREBASE_INSTANCE']
70 | buildConfigField "String", "RETURN_URL", localProperties['RETURN_URL']
71 | buildConfigField "String", "AAPASSENGER_LINK", localProperties['AAPASSENGER_LINK']
72 | buildConfigField "String", "CARSTREAM205_LINK", localProperties['CARSTREAM205_LINK']
73 | buildConfigField "String", "CARSTREAM204_LINK", localProperties['CARSTREAM204_LINK']
74 | buildConfigField "String", "CARSTREAM202_LINK", localProperties['CARSTREAM202_LINK']
75 | buildConfigField "String", "AAMP_LINK", localProperties['AAMP_LINK']
76 | buildConfigField "String", "AAMIRROR_LINK", localProperties['AAMIRROR_LINK']
77 | buildConfigField "String", "AAWIDGETS_LINK", localProperties['AAWIDGETS_LINK']
78 | buildConfigField "String", "AASTREAM_LINK", localProperties['AASTREAM_LINK']
79 |
80 | }
81 |
82 | buildTypes {
83 | release {
84 | minifyEnabled false
85 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
86 | }
87 | }
88 | }
89 |
90 | dependencies {
91 | implementation fileTree(dir: "libs", include: ["*.jar"])
92 | implementation 'androidx.appcompat:appcompat:1.2.0'
93 | implementation 'com.google.android.material:material:1.3.0'
94 | implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
95 | implementation 'com.google.firebase:firebase-database:19.7.0'
96 | implementation 'org.jsoup:jsoup:1.13.1'
97 | testImplementation 'junit:junit:4.13.2'
98 | androidTestImplementation 'androidx.test.ext:junit:1.1.2'
99 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
100 | implementation "org.jetbrains.kotlin:kotlin-stdlib:1.4.32"
101 | implementation 'androidx.core:core-ktx:1.3.2'
102 | implementation 'com.android.volley:volley:1.2.0'
103 | implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.2'
104 | implementation 'commons-net:commons-net:3.6'
105 | implementation 'io.github.kaustubhpatange:paypal-checkout:1.4'
106 | implementation 'com.github.iGio90:BottomDialogs:master-SNAPSHOT'
107 | implementation 'org.apache.httpcomponents:httpclient:4.5.6'
108 | api 'org.apache.httpcomponents:httpcore:4.4.10'
109 | api 'org.apache.httpcomponents:httpmime:4.5.6'
110 | implementation group: 'commons-io', name: 'commons-io', version: '2.6'
111 | implementation 'com.github.blikoon:QRCodeScanner:0.1.2'
112 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/legs/appsforaa/EnterProCode.java:
--------------------------------------------------------------------------------
1 | package com.legs.appsforaa;
2 |
3 | import android.content.Intent;
4 | import android.os.Bundle;
5 | import android.text.InputType;
6 | import android.view.View;
7 | import android.widget.Button;
8 | import android.widget.EditText;
9 | import android.widget.Toast;
10 |
11 | import androidx.annotation.NonNull;
12 | import androidx.annotation.Nullable;
13 | import androidx.appcompat.app.AppCompatActivity;
14 |
15 | import com.google.firebase.database.DataSnapshot;
16 | import com.google.firebase.database.DatabaseError;
17 | import com.google.firebase.database.DatabaseReference;
18 | import com.google.firebase.database.FirebaseDatabase;
19 | import com.google.firebase.database.ValueEventListener;
20 |
21 | public class EnterProCode extends AppCompatActivity {
22 |
23 | private String m_Text = "";
24 |
25 | @Override
26 | public void onCreate(Bundle savedInstanceState) {
27 | super.onCreate(savedInstanceState);
28 | setContentView(R.layout.code_input);
29 |
30 |
31 | final String deviceId = getIntent().getExtras().getString("did");
32 |
33 | final EditText input = findViewById(R.id.input_text);
34 |
35 | input.setInputType(InputType.TYPE_CLASS_TEXT);
36 | input.setHint(R.string.promo_code);
37 |
38 | Button proceedButton = findViewById(R.id.validate);
39 | Button cancelButton = findViewById(R.id.cancel);
40 |
41 | cancelButton.setOnClickListener(new View.OnClickListener() {
42 | @Override
43 | public void onClick(View v) {
44 | finish();
45 | }
46 | });
47 |
48 | proceedButton.setOnClickListener(new View.OnClickListener() {
49 | @Override
50 | public void onClick(View v) {
51 |
52 | m_Text = input.getText().toString();
53 |
54 | if (m_Text.isEmpty()) {
55 | Toast.makeText(getApplicationContext(), R.string.please_enter_code, Toast.LENGTH_LONG).show();
56 | } else {
57 | FirebaseDatabase database = FirebaseDatabase.getInstance(BuildConfig.FIREBASE_INSTANCE);
58 | final DatabaseReference myRef = database.getReference("pc");
59 | final DatabaseReference secondRef = database.getReference("users");
60 |
61 | myRef.child(m_Text).addListenerForSingleValueEvent(new ValueEventListener() {
62 | @Override
63 | public void onDataChange(@NonNull DataSnapshot snapshot) {
64 | if (snapshot.exists()) {
65 | if (snapshot.getValue(Boolean.class)) {
66 | myRef.child(m_Text).removeValue();
67 | secondRef.child(deviceId).setValue(Boolean.TRUE, new DatabaseReference.CompletionListener() {
68 | @Override
69 | public void onComplete(@Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {
70 | if (databaseError != null) {
71 | Toast.makeText(getApplicationContext(), getString(R.string.connection_error), Toast.LENGTH_LONG).show();
72 | } else {
73 | Toast.makeText(getApplicationContext(), getString(R.string.pro_unlocked), Toast.LENGTH_LONG).show();
74 | startActivity(new Intent(EnterProCode.this, MainActivity.class));
75 | }
76 |
77 | }
78 | });
79 | } else {
80 |
81 | Intent i = new Intent(EnterProCode.this, AboutPaymentActivity.class);
82 | i.putExtra("promotion", true);
83 | Toast.makeText(getApplicationContext(), getString(R.string.promotion), Toast.LENGTH_LONG).show();
84 |
85 | startActivity(i);
86 | }
87 | } else {
88 | Toast.makeText(getApplicationContext(), getString(R.string.not_valid_code), Toast.LENGTH_LONG).show();
89 | }
90 | }
91 |
92 | @Override
93 | public void onCancelled(@NonNull DatabaseError error) {
94 | Toast.makeText(getApplicationContext(), getString(R.string.connect_error), Toast.LENGTH_LONG).show();
95 | }
96 | });
97 |
98 | }
99 |
100 | }
101 | });
102 |
103 | }
104 |
105 |
106 | }
107 |
--------------------------------------------------------------------------------
/app/src/main/res/values-zh-rTW/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 歡迎使用Android Auto Apps Downloader (AAAD)。本軟體可以在無ROOT的手機上安裝Android Auto第三方應用程式。選擇要安裝的應用程式,等待安裝程式完成。長按選項顯示說明。
4 | PRO版本
5 | AAAD免費版本允許您每月免費下載一次。如果您想要無限的下載及更新,可以升級到PRO版本,您將享受全部功能和應用程式更新
6 | 恭喜你,已經升級為PRO版本!
7 | 無網路連線: 無法驗證PRO版本狀態
8 | 關於
9 | 我有一個促銷代碼
10 | 請輸入促銷代碼
11 | 請在這裡輸入促銷代碼
12 | 您要下載 %1$s %2$s,並安裝 %3$s 嗎?
13 | 您確定要繼續下載 %1$s 嗎?
14 | 否
15 | 付款結束後,請手動按\"返回商戶\"以確認交易。
16 | 注意
17 | 下一次可下載時間為 %1$s
18 | 錯誤連線
19 |
20 | - 剩餘可用下載次數 0
21 |
22 | "
可用的應用程式由以下開發人員提供:
]]>"
23 | 恭喜,PRO版本已解鎖
24 | 取消購買
25 | 請輸入促銷代碼
26 | 錯誤連線,無法驗證
27 | 無效的促銷代碼
28 | 選擇一個你想安裝的版本?
29 | 正在下載...
30 | 具有一些其他功能的AAMirror替代應用程式。
31 | 本應用程式是為了讓乘客能夠管理Android Auto中的某些功能。需要下載AAPassenger。目前工作狀態未知。
32 | 最完整,功能最全的Android Auto鏡像應用程式。包括許多功能,例如可自定義的啟動器,多視窗,可在車機上操控手機,自定義螢幕尺寸等等!
33 | 首款Android Auto螢幕鏡像應用程式。 AAMirror只是將手機螢幕鏡像到車機上。
34 | AAMirror的另一種選擇,具有一些額外的功能。最近由Annexhack修復並且修復為較新的Android版本。
35 | CarStream原名\"YouTube Auto\",是使用自定義應用程式SDK開發的首款應用之一。它誕生之初的主要目的是將YouTube能用於Android Auto,之後版本具有許多功能的網路瀏覽器。
36 | "Android Auto最完整的影片和音樂播放器,具有完整的播放器體驗以及許多功能,例如網路串流和Web瀏覽器。它還附加了方向盤控制的應用程式Fermata Control,該應用允許在方向盤上控制播放暫停上下一首等功能。"
37 | 您將跳轉到screen2auto網站。從那裡選擇版本,並使用AAAD開啟。
38 | 您要繼續安裝Screen2Auto嗎?
39 | 請再按一下返回鍵以退出
40 | 生來就有一個挑戰-為Android Auto新增一個widget!
41 | 這是一個基於Martoreto的aa-stats的性能查看器。專門用於Volkswagen/Skoda/Seat/Audi MIB2 訊息娛樂設備一起使用而設計的,但它也可以在其他裝置上使用,要它們具有Android Auto支持即可。還需要VAG擴展才能在Volkswagen汽車上使用。
42 | 您有一個 15% 的折扣
43 | 多媒體應用
44 | 鏡像應用
45 | 其他應用
46 | 您的裝置與Fermata不相容。
47 | 有可用的新版本!
48 | GitHub上有新版本的AAAD(版本%1$s)。您要立即下載嗎?
49 | 前往下載
50 | 暫時忽略
51 | "為了進行驗證,AAAD收集了由Android安全生成的序號-ANDROID ID,以驗證PRO版本,並且不收集有關裝置型號,IMIEI或位置等重要訊息。
PRO版本的付款由PayPal管理,出於確認和退款的使用,郵件將存儲到雲端Firebase數據庫中。]]>"
52 | 隱私權政策
53 | 讀取中...
54 | 升級到PRO版本!
55 | 我很好
56 | 隨著新的導航應用支援Android Auto,許多應用程式無法使用Google助手來導航到聯絡人中的聯絡人住址。使用Nav2Contacts來替代! 首先,選擇要使用的導航應用程式,然後搜尋要導航到的聯絡人並開始導航!
57 | 此應用需要Android %d 之後版本。
58 | 付款完成後,請記得按藍色按鈕\"返回商戶網站\"
59 | 幫助
60 | 您是否要立即寄電子郵件尋求幫助?
61 | 您的手機CPU型態可能與大多數應用程序不相容。 在繼續之前,請試下載一個應用程式。
62 | 我了解了
63 | 忽略
64 | 我想轉讓授權
65 | 我想從這裡轉讓授權
66 | 如果要將授權從裝置轉移到另一部裝置,那麼您來對地方了。 請選擇您想做的
67 | 轉讓授權
68 | 確認
69 | 您確定要將授權轉移到此裝置嗎?
70 | 太好了,現在打開您要從中轉移授權的裝置,然後選擇\"我要從此處轉移許授權\",然後掃描此QR碼
71 | 授權轉讓
72 | 您在此裝置上沒有有效的授權
73 | 在繼續之前,您必須啟用未知來源安裝。 忽略此選項AAAD可能會錯誤。現在按確定進入設定,您必須開啟\"未知來源\"選項。
74 | 需要相機權限才能掃描QR碼
75 | 授權有效
76 |
77 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
15 |
20 |
25 |
30 |
35 |
40 |
45 |
50 |
55 |
60 |
65 |
70 |
75 |
80 |
85 |
90 |
95 |
100 |
105 |
110 |
115 |
120 |
125 |
130 |
135 |
140 |
145 |
150 |
155 |
160 |
165 |
170 |
171 |
--------------------------------------------------------------------------------
/app/src/main/java/com/legs/appsforaa/AboutPaymentActivity.kt:
--------------------------------------------------------------------------------
1 | package com.legs.appsforaa
2 |
3 | import android.content.Intent
4 | import android.os.Bundle
5 | import android.provider.Settings
6 | import android.text.format.DateFormat
7 | import android.view.Menu
8 | import android.view.MenuItem
9 | import android.view.View
10 | import android.widget.Button
11 | import android.widget.TextView
12 | import android.widget.Toast
13 | import androidx.appcompat.app.AlertDialog
14 | import androidx.appcompat.app.AppCompatActivity
15 | import com.google.firebase.database.DatabaseReference
16 | import com.google.firebase.database.FirebaseDatabase
17 | import com.kpstv.library.Paypal
18 | import java.lang.Boolean
19 | import java.text.SimpleDateFormat
20 | import java.util.*
21 |
22 |
23 | class AboutPaymentActivity : AppCompatActivity() {
24 |
25 | private lateinit var paypal: Paypal
26 | private var deviceId: String = ""
27 |
28 | override fun onCreate(savedInstanceState: Bundle?) {
29 |
30 | val extras = intent.extras
31 |
32 | var ppId = BuildConfig.PAYPAL_ID
33 |
34 | val nextTry = extras?.getLong("date")
35 | val promo = extras?.getBoolean("promotion")
36 |
37 | if (promo == true) {
38 | ppId = BuildConfig.PAYPAL_ID_PROMO
39 | }
40 |
41 | super.onCreate(savedInstanceState)
42 | setContentView(R.layout.activity_about_payment)
43 | val imGood = findViewById