From 75a93f052e8eabf2f12e97c9ce8306dc9ead19d3 Mon Sep 17 00:00:00 2001 From: X1nto Date: Mon, 27 Jul 2020 20:46:20 +0400 Subject: [PATCH] fixed R attribute imports --- .../selfcheck/InstalledPackagesChecks.java | 68 -------------- .../selfcheck/RomSpoofSignatureChecks.java | 84 ------------------ .../microg/tools/selfcheck/SystemChecks.java | 61 ------------- .../src/main/res/layout/ask_permission.xml | 4 +- .../layout/device_registration_fragment.xml | 3 +- .../res/mipmap-hdpi/ic_core_service_app.png | Bin 2453 -> 0 bytes .../res/mipmap-mdpi/ic_core_service_app.png | Bin 1664 -> 0 bytes .../res/mipmap-xhdpi/ic_core_service_app.png | Bin 3269 -> 0 bytes .../res/mipmap-xxhdpi/ic_core_service_app.png | Bin 5004 -> 0 bytes .../mipmap-xxxhdpi/ic_core_service_app.png | Bin 7404 -> 0 bytes 10 files changed, 2 insertions(+), 218 deletions(-) delete mode 100755 play-services-core/src/main/java/org/microg/tools/selfcheck/InstalledPackagesChecks.java delete mode 100755 play-services-core/src/main/java/org/microg/tools/selfcheck/RomSpoofSignatureChecks.java delete mode 100755 play-services-core/src/main/java/org/microg/tools/selfcheck/SystemChecks.java delete mode 100755 play-services-core/src/main/res/mipmap-hdpi/ic_core_service_app.png delete mode 100644 play-services-core/src/main/res/mipmap-mdpi/ic_core_service_app.png delete mode 100644 play-services-core/src/main/res/mipmap-xhdpi/ic_core_service_app.png delete mode 100644 play-services-core/src/main/res/mipmap-xxhdpi/ic_core_service_app.png delete mode 100644 play-services-core/src/main/res/mipmap-xxxhdpi/ic_core_service_app.png diff --git a/play-services-core/src/main/java/org/microg/tools/selfcheck/InstalledPackagesChecks.java b/play-services-core/src/main/java/org/microg/tools/selfcheck/InstalledPackagesChecks.java deleted file mode 100755 index e34d3dd0..00000000 --- a/play-services-core/src/main/java/org/microg/tools/selfcheck/InstalledPackagesChecks.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2013-2017 microG Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.microg.tools.selfcheck; - -import android.content.Context; -import android.content.pm.PackageManager; - -import com.google.android.gms.R; - -import org.microg.gms.common.Constants; -import org.microg.gms.common.PackageUtils; - -import static org.microg.tools.selfcheck.SelfCheckGroup.Result.Negative; -import static org.microg.tools.selfcheck.SelfCheckGroup.Result.Positive; - -public class InstalledPackagesChecks implements SelfCheckGroup { - - @Override - public String getGroupName(Context context) { - return context.getString(R.string.self_check_cat_gms_packages); - } - - @Override - public void doChecks(Context context, ResultCollector collector) { - addPackageInstalledAndSignedResult(context, collector, context.getString(R.string.self_check_pkg_gms), Constants.GMS_PACKAGE_NAME, Constants.GMS_PACKAGE_SIGNATURE_SHA1); - addPackageInstalledAndSignedResult(context, collector, context.getString(R.string.self_check_pkg_vending), "com.android.vending", Constants.GMS_PACKAGE_SIGNATURE_SHA1); - addPackageInstalledResult(context, collector, context.getString(R.string.self_check_pkg_gsf), Constants.GSF_PACKAGE_NAME); - } - - private void addPackageInstalledAndSignedResult(Context context, ResultCollector collector, String nicePackageName, String androidPackageName, String signatureHash) { - if (addPackageInstalledResult(context, collector, nicePackageName, androidPackageName)) { - addPackageSignedResult(context, collector, nicePackageName, androidPackageName, signatureHash); - } - } - - private boolean addPackageSignedResult(Context context, ResultCollector collector, String nicePackageName, String androidPackageName, String signatureHash) { - boolean hashMatches = signatureHash.equals(PackageUtils.firstSignatureDigest(context, androidPackageName)); - collector.addResult(context.getString(R.string.self_check_name_correct_sig, nicePackageName), hashMatches ? Positive : Negative, - context.getString(R.string.self_check_resolution_correct_sig, nicePackageName)); - return hashMatches; - } - - private boolean addPackageInstalledResult(Context context, ResultCollector collector, String nicePackageName, String androidPackageName) { - boolean packageExists = true; - try { - context.getPackageManager().getPackageInfo(androidPackageName, 0); - } catch (PackageManager.NameNotFoundException e) { - packageExists = false; - } - collector.addResult(context.getString(R.string.self_check_name_app_installed, nicePackageName), packageExists ? Positive : Negative, - context.getString(R.string.self_check_resolution_app_installed, nicePackageName)); - return packageExists; - } -} diff --git a/play-services-core/src/main/java/org/microg/tools/selfcheck/RomSpoofSignatureChecks.java b/play-services-core/src/main/java/org/microg/tools/selfcheck/RomSpoofSignatureChecks.java deleted file mode 100755 index beb61d98..00000000 --- a/play-services-core/src/main/java/org/microg/tools/selfcheck/RomSpoofSignatureChecks.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2013-2017 microG Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.microg.tools.selfcheck; - -import android.content.Context; -import android.content.pm.PackageManager; - -import androidx.core.content.ContextCompat; -import androidx.fragment.app.Fragment; - -import com.google.android.gms.R; - -import org.microg.gms.common.Constants; -import org.microg.gms.common.PackageUtils; - -import static android.content.pm.PackageManager.PERMISSION_GRANTED; -import static org.microg.gms.common.Constants.GMS_PACKAGE_SIGNATURE_SHA1; -import static org.microg.tools.selfcheck.SelfCheckGroup.Result.Negative; -import static org.microg.tools.selfcheck.SelfCheckGroup.Result.Positive; -import static org.microg.tools.selfcheck.SelfCheckGroup.Result.Unknown; - -public class RomSpoofSignatureChecks implements SelfCheckGroup { - - public static final String FAKE_SIGNATURE_PERMISSION = "android.permission.FAKE_PACKAGE_SIGNATURE"; - - @Override - public String getGroupName(Context context) { - return context.getString(R.string.self_check_cat_fake_sig); - } - - @Override - public void doChecks(Context context, ResultCollector collector) { - boolean hasPermission = addRomKnowsFakeSignaturePermission(context, collector); - if (hasPermission) { - addSystemGrantsFakeSignaturePermission(context, collector); - } - addSystemSpoofsSignature(context, collector); - } - - private boolean addRomKnowsFakeSignaturePermission(Context context, ResultCollector collector) { - boolean knowsPermission = true; - try { - context.getPackageManager().getPermissionInfo(FAKE_SIGNATURE_PERMISSION, 0); - } catch (PackageManager.NameNotFoundException e) { - knowsPermission = false; - } - collector.addResult(context.getString(R.string.self_check_name_fake_sig_perm), knowsPermission ? Positive : Unknown, - context.getString(R.string.self_check_resolution_fake_sig_perm)); - return knowsPermission; - } - - private boolean addSystemGrantsFakeSignaturePermission(Context context, ResultCollector collector) { - boolean grantsPermission = ContextCompat.checkSelfPermission(context, FAKE_SIGNATURE_PERMISSION) == PERMISSION_GRANTED; - collector.addResult(context.getString(R.string.self_check_name_perm_granted), grantsPermission ? Positive : Negative, - context.getString(R.string.self_check_resolution_perm_granted), new CheckResolver() { - @Override - public void tryResolve(Fragment fragment) { - fragment.requestPermissions(new String[]{FAKE_SIGNATURE_PERMISSION}, 0); - } - }); - return grantsPermission; - } - - private boolean addSystemSpoofsSignature(Context context, ResultCollector collector) { - boolean spoofsSignature = GMS_PACKAGE_SIGNATURE_SHA1.equals(PackageUtils.firstSignatureDigest(context, Constants.GMS_PACKAGE_NAME)); - collector.addResult(context.getString(R.string.self_check_name_system_spoofs), spoofsSignature ? Positive : Negative, - context.getString(R.string.self_check_resolution_system_spoofs)); - return spoofsSignature; - } -} diff --git a/play-services-core/src/main/java/org/microg/tools/selfcheck/SystemChecks.java b/play-services-core/src/main/java/org/microg/tools/selfcheck/SystemChecks.java deleted file mode 100755 index c091d2d0..00000000 --- a/play-services-core/src/main/java/org/microg/tools/selfcheck/SystemChecks.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2013-2017 microG Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.microg.tools.selfcheck; - -import android.annotation.TargetApi; -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.os.PowerManager; -import android.provider.Settings; - -import androidx.fragment.app.Fragment; - -import com.google.android.gms.R; - -import static org.microg.tools.selfcheck.SelfCheckGroup.Result.Negative; -import static org.microg.tools.selfcheck.SelfCheckGroup.Result.Positive; - -@TargetApi(23) -public class SystemChecks implements SelfCheckGroup, SelfCheckGroup.CheckResolver { - - public static final int REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = 417; - - @Override - public String getGroupName(Context context) { - return context.getString(R.string.self_check_cat_system); - } - - @Override - public void doChecks(Context context, ResultCollector collector) { - isBatterySavingDisabled(context, collector); - } - - private void isBatterySavingDisabled(final Context context, ResultCollector collector) { - PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); - collector.addResult(context.getString(R.string.self_check_name_battery_optimizations), - pm.isIgnoringBatteryOptimizations(context.getPackageName()) ? Positive : Negative, - context.getString(R.string.self_check_resolution_battery_optimizations), this); - } - - @Override - public void tryResolve(Fragment fragment) { - Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); - intent.setData(Uri.parse("package:" + fragment.getActivity().getPackageName())); - fragment.startActivityForResult(intent, REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); - } -} diff --git a/play-services-core/src/main/res/layout/ask_permission.xml b/play-services-core/src/main/res/layout/ask_permission.xml index 6ef04c35..9426a4a8 100755 --- a/play-services-core/src/main/res/layout/ask_permission.xml +++ b/play-services-core/src/main/res/layout/ask_permission.xml @@ -54,7 +54,6 @@ @@ -69,13 +68,12 @@ diff --git a/play-services-core/src/main/res/layout/device_registration_fragment.xml b/play-services-core/src/main/res/layout/device_registration_fragment.xml index 0f0648dc..9f040cbc 100755 --- a/play-services-core/src/main/res/layout/device_registration_fragment.xml +++ b/play-services-core/src/main/res/layout/device_registration_fragment.xml @@ -5,8 +5,7 @@ --> + xmlns:app="http://schemas.android.com/apk/res-auto"> diff --git a/play-services-core/src/main/res/mipmap-hdpi/ic_core_service_app.png b/play-services-core/src/main/res/mipmap-hdpi/ic_core_service_app.png deleted file mode 100755 index 47a7303a09381570a841c934e3de5806a54af52f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2453 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 KMNUMnLSTY_B^ovW diff --git a/play-services-core/src/main/res/mipmap-xhdpi/ic_core_service_app.png b/play-services-core/src/main/res/mipmap-xhdpi/ic_core_service_app.png deleted file mode 100644 index dc1da2080cb11286faeaf333bbbe0d78e2f9079d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3269 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 OCQy=7lP!K`7WhB+&(R