From 8e4db1d2841f24da7cb7e2944d26b9c336368a04 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 11 Dec 2020 11:09:35 +0100 Subject: [PATCH] Check for tracker --- .../exodusprivacy/CheckAppActivity.java | 42 ++- .../exodus_privacy/exodusprivacy/Utils.java | 4 + .../fragments/ReportFragment.java | 3 +- .../exodusprivacy/manager/NetworkManager.java | 25 +- .../main/res/layout/app_check_activity.xml | 313 ++---------------- 5 files changed, 72 insertions(+), 315 deletions(-) diff --git a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/CheckAppActivity.java b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/CheckAppActivity.java index 02a2a9c..dce488f 100644 --- a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/CheckAppActivity.java +++ b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/CheckAppActivity.java @@ -1,13 +1,19 @@ package org.eu.exodus_privacy.exodusprivacy; import android.content.Intent; +import android.net.Uri; import android.os.Bundle; import android.view.View; import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; +import androidx.recyclerview.widget.LinearLayoutManager; import org.eu.exodus_privacy.exodusprivacy.adapters.ApplicationViewModel; +import org.eu.exodus_privacy.exodusprivacy.adapters.TrackerListAdapter; import org.eu.exodus_privacy.exodusprivacy.databinding.AppCheckActivityBinding; +import org.eu.exodus_privacy.exodusprivacy.fragments.TrackerFragment; import org.eu.exodus_privacy.exodusprivacy.fragments.Updatable; import org.eu.exodus_privacy.exodusprivacy.listener.NetworkListener; import org.eu.exodus_privacy.exodusprivacy.manager.DatabaseManager; @@ -20,13 +26,24 @@ import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class CheckAppActivity extends AppCompatActivity implements NetworkListener { +public class CheckAppActivity extends AppCompatActivity implements NetworkListener, TrackerListAdapter.OnTrackerClickListener { private static final Pattern fdroidRegex = Pattern.compile("https?://f-droid\\.org/[\\w-]+/packages/([\\w.-]+)"); private static final Pattern googleRegex = Pattern.compile("https?://play\\.google\\.com/store/apps/details\\?id=([\\w.-]+)"); ArrayList fragments; AppCheckActivityBinding binding; + TrackerListAdapter.OnTrackerClickListener onTrackerClickListener = id -> { + TrackerFragment tracker = TrackerFragment.newInstance(id); + fragments.add(tracker); + FragmentManager manager = getSupportFragmentManager(); + FragmentTransaction transaction = manager.beginTransaction(); + transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_right, R.anim.slide_in_left, R.anim.slide_out_left) + .replace(R.id.fragment_container, tracker) + .addToBackStack(null) + .commit(); + }; + private TrackerListAdapter.OnTrackerClickListener trackerClickListener; @Override protected void onCreate(Bundle savedInstanceState) { @@ -48,13 +65,15 @@ public class CheckAppActivity extends AppCompatActivity implements NetworkListen app_id = matcher.group(1); } } - + setOnTrackerClickListener(trackerClickListener); fragments = new ArrayList<>(); NetworkManager.getInstance().getSingleReport(CheckAppActivity.this, this, app_id); } + } - + private void setOnTrackerClickListener(TrackerListAdapter.OnTrackerClickListener listener) { + trackerClickListener = listener; } @Override @@ -78,14 +97,24 @@ public class CheckAppActivity extends AppCompatActivity implements NetworkListen } applicationViewModel.report = reportToKeep; applicationViewModel.source = reportToKeep.source; + applicationViewModel.versionCode = (int) reportToKeep.versionCode; + applicationViewModel.versionName = reportToKeep.version; applicationViewModel.trackers = DatabaseManager.getInstance(CheckAppActivity.this).getTrackers(reportToKeep.trackers); - ReportDisplay reportDisplay = ReportDisplay.buildReportDisplay(CheckAppActivity.this, applicationViewModel, null, null); ReportViewModel viewModel = new ReportViewModel(); + viewModel.setReportDisplay(reportDisplay); + TrackerListAdapter trackerAdapter = new TrackerListAdapter(reportDisplay.trackers, R.layout.tracker_item, onTrackerClickListener); binding = AppCheckActivityBinding.inflate(getLayoutInflater()); + binding.reportUrl.setOnClickListener(v -> { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse("https://" + Utils.getDomain() + "/reports/" + reportDisplay.report.id + "/")); + startActivity(intent); + }); binding.setReportInfo(viewModel); + binding.trackers.setAdapter(trackerAdapter); + binding.trackers.setLayoutManager(new LinearLayoutManager(CheckAppActivity.this)); View viewRoot = binding.getRoot(); setContentView(viewRoot); }); @@ -98,4 +127,9 @@ public class CheckAppActivity extends AppCompatActivity implements NetworkListen @Override public void onProgress(int resourceId, int progress, int maxProgress) { } + + @Override + public void onTrackerClick(long trackerId) { + + } } diff --git a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/Utils.java b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/Utils.java index 919b587..6b82edd 100644 --- a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/Utils.java +++ b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/Utils.java @@ -29,6 +29,10 @@ public class Utils { public static final String APP_PREFS = "app_prefs"; public static final String LAST_REFRESH = "last_refresh"; + public static String getDomain() { + return BuildConfig.FLAVOR.compareTo("exodus") == 0 ? "reports.exodus-privacy.eu.org" : "exodus.phm.education.gouv.fr"; + } + @SuppressLint("PackageManagerGetSignatures") public static String getCertificateSHA1Fingerprint(PackageManager pm, String packageName) { int flags = PackageManager.GET_SIGNATURES; diff --git a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/fragments/ReportFragment.java b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/fragments/ReportFragment.java index 60f0dfb..6640a65 100644 --- a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/fragments/ReportFragment.java +++ b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/fragments/ReportFragment.java @@ -38,6 +38,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import org.eu.exodus_privacy.exodusprivacy.R; import org.eu.exodus_privacy.exodusprivacy.ReportViewModel; +import org.eu.exodus_privacy.exodusprivacy.Utils; import org.eu.exodus_privacy.exodusprivacy.adapters.ApplicationViewModel; import org.eu.exodus_privacy.exodusprivacy.adapters.PermissionListAdapter; import org.eu.exodus_privacy.exodusprivacy.adapters.TrackerListAdapter; @@ -143,7 +144,7 @@ public class ReportFragment extends Fragment implements Updatable { if (reportDisplay.report != null) { reportBinding.reportUrl.setOnClickListener(v -> { Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse("https://reports.exodus-privacy.eu.org/reports/" + reportDisplay.report.id + "/")); + intent.setData(Uri.parse("https://" + Utils.getDomain() + "/reports/" + reportDisplay.report.id + "/")); startActivity(intent); }); } diff --git a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/manager/NetworkManager.java b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/manager/NetworkManager.java index da19fb3..0e83c30 100644 --- a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/manager/NetworkManager.java +++ b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/manager/NetworkManager.java @@ -24,7 +24,6 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; -import org.eu.exodus_privacy.exodusprivacy.BuildConfig; import org.eu.exodus_privacy.exodusprivacy.R; import org.eu.exodus_privacy.exodusprivacy.Utils; import org.eu.exodus_privacy.exodusprivacy.listener.NetworkListener; @@ -112,7 +111,7 @@ public class NetworkManager { } private static class NetworkProcessingThread extends Thread { - private final String domain = BuildConfig.FLAVOR.compareTo("exodus") == 0 ? "reports.exodus-privacy.eu.org" : "exodus.phm.education.gouv.fr"; + private final String domain = Utils.getDomain(); private final String apiUrl = "https://" + domain + "/api/"; private final List messageQueue; private final Semaphore sem; @@ -146,7 +145,8 @@ public class NetworkManager { editor.apply(); break; case GET_SINGLE_REPORT: - Application application = getApplicationsNoActions(mes); + String packageName = mes.args.getString("package"); + Application application = getSingleReport(mes, packageName); mes.listener.onSuccess(application); break; default: @@ -246,25 +246,6 @@ public class NetworkManager { } - private Application getApplicationsNoActions(Message mes) { - URL url; - try { - url = new URL(apiUrl + "applications?option=short"); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - JSONObject object = makeDataRequest(mes.context, mes.listener, url); - - if (object != null) { - String packageName = mes.args.getString("package"); - if (packageName == null) - return null; - return getSingleReport(mes, packageName); - } - mes.listener.onSuccess(null); - return null; - } private void getApplications(Message mes) { mes.listener.onProgress(R.string.get_reports_connection, 0, 0); diff --git a/app/src/main/res/layout/app_check_activity.xml b/app/src/main/res/layout/app_check_activity.xml index 1ebe76b..05bc6cf 100644 --- a/app/src/main/res/layout/app_check_activity.xml +++ b/app/src/main/res/layout/app_check_activity.xml @@ -16,22 +16,9 @@ - - - - + app:layout_constraintTop_toTopOf="parent" /> - - + app:layout_constraintTop_toBottomOf="@id/trackers_title" /> + app:layout_constraintTop_toTopOf="@+id/installed_version" /> - - - - - - - - + app:layout_constraintTop_toBottomOf="@id/installed_version_value" /> - - - - - - - + app:layout_constraintTop_toBottomOf="@id/report_url"> - + - - - - - - - - - - - - - + + + app:layout_constraintTop_toBottomOf="@id/report_url" />