2020-12-11 10:20:31 +01:00
|
|
|
package org.eu.exodus_privacy.exodusprivacy;
|
|
|
|
|
|
|
|
import android.content.Intent;
|
2020-12-11 11:09:35 +01:00
|
|
|
import android.net.Uri;
|
2020-12-11 10:20:31 +01:00
|
|
|
import android.os.Bundle;
|
|
|
|
import android.view.View;
|
|
|
|
|
|
|
|
import androidx.appcompat.app.AppCompatActivity;
|
2020-12-11 11:09:35 +01:00
|
|
|
import androidx.fragment.app.FragmentManager;
|
|
|
|
import androidx.fragment.app.FragmentTransaction;
|
|
|
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
2020-12-11 10:20:31 +01:00
|
|
|
|
|
|
|
import org.eu.exodus_privacy.exodusprivacy.adapters.ApplicationViewModel;
|
2020-12-11 11:09:35 +01:00
|
|
|
import org.eu.exodus_privacy.exodusprivacy.adapters.TrackerListAdapter;
|
2020-12-11 10:20:31 +01:00
|
|
|
import org.eu.exodus_privacy.exodusprivacy.databinding.AppCheckActivityBinding;
|
2020-12-11 11:09:35 +01:00
|
|
|
import org.eu.exodus_privacy.exodusprivacy.fragments.TrackerFragment;
|
2020-12-11 10:20:31 +01:00
|
|
|
import org.eu.exodus_privacy.exodusprivacy.fragments.Updatable;
|
|
|
|
import org.eu.exodus_privacy.exodusprivacy.listener.NetworkListener;
|
|
|
|
import org.eu.exodus_privacy.exodusprivacy.manager.DatabaseManager;
|
|
|
|
import org.eu.exodus_privacy.exodusprivacy.manager.NetworkManager;
|
|
|
|
import org.eu.exodus_privacy.exodusprivacy.objects.Application;
|
|
|
|
import org.eu.exodus_privacy.exodusprivacy.objects.Report;
|
|
|
|
import org.eu.exodus_privacy.exodusprivacy.objects.ReportDisplay;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.regex.Matcher;
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
2020-12-11 11:09:35 +01:00
|
|
|
public class CheckAppActivity extends AppCompatActivity implements NetworkListener, TrackerListAdapter.OnTrackerClickListener {
|
2020-12-11 10:20:31 +01:00
|
|
|
|
|
|
|
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<Updatable> fragments;
|
|
|
|
AppCheckActivityBinding binding;
|
2020-12-11 11:09:35 +01:00
|
|
|
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;
|
2020-12-11 10:20:31 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
|
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
|
|
|
|
|
|
|
|
Intent intent = getIntent();
|
|
|
|
String extraText = intent.getStringExtra(Intent.EXTRA_TEXT);
|
|
|
|
if (extraText != null) {
|
|
|
|
Matcher matcher = fdroidRegex.matcher(extraText);
|
|
|
|
String app_id = null;
|
|
|
|
while (matcher.find()) {
|
|
|
|
app_id = matcher.group(1);
|
|
|
|
}
|
|
|
|
if (app_id == null) {
|
|
|
|
matcher = googleRegex.matcher(extraText);
|
|
|
|
while (matcher.find()) {
|
|
|
|
app_id = matcher.group(1);
|
|
|
|
}
|
|
|
|
}
|
2020-12-11 11:09:35 +01:00
|
|
|
setOnTrackerClickListener(trackerClickListener);
|
2020-12-11 10:20:31 +01:00
|
|
|
fragments = new ArrayList<>();
|
|
|
|
NetworkManager.getInstance().getSingleReport(CheckAppActivity.this, this, app_id);
|
|
|
|
|
|
|
|
}
|
2020-12-11 11:09:35 +01:00
|
|
|
}
|
2020-12-11 10:20:31 +01:00
|
|
|
|
2020-12-11 11:09:35 +01:00
|
|
|
private void setOnTrackerClickListener(TrackerListAdapter.OnTrackerClickListener listener) {
|
|
|
|
trackerClickListener = listener;
|
2020-12-11 10:20:31 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onSuccess(Application application) {
|
|
|
|
runOnUiThread(() -> {
|
|
|
|
ApplicationViewModel applicationViewModel = new ApplicationViewModel();
|
|
|
|
|
|
|
|
applicationViewModel.packageName = application.packageName;
|
|
|
|
applicationViewModel.label = application.name;
|
|
|
|
|
|
|
|
Report reportToKeep = null;
|
|
|
|
long versionCode = -1;
|
|
|
|
for (Report report : application.reports) {
|
|
|
|
if (versionCode == -1) {
|
|
|
|
reportToKeep = report;
|
|
|
|
versionCode = report.versionCode;
|
|
|
|
} else if (report.versionCode > versionCode) {
|
|
|
|
reportToKeep = report;
|
|
|
|
versionCode = report.versionCode;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
applicationViewModel.report = reportToKeep;
|
|
|
|
applicationViewModel.source = reportToKeep.source;
|
2020-12-11 11:09:35 +01:00
|
|
|
applicationViewModel.versionCode = (int) reportToKeep.versionCode;
|
|
|
|
applicationViewModel.versionName = reportToKeep.version;
|
2020-12-11 10:20:31 +01:00
|
|
|
applicationViewModel.trackers = DatabaseManager.getInstance(CheckAppActivity.this).getTrackers(reportToKeep.trackers);
|
|
|
|
ReportDisplay reportDisplay = ReportDisplay.buildReportDisplay(CheckAppActivity.this, applicationViewModel, null, null);
|
|
|
|
ReportViewModel viewModel = new ReportViewModel();
|
2020-12-11 11:09:35 +01:00
|
|
|
|
2020-12-11 10:20:31 +01:00
|
|
|
viewModel.setReportDisplay(reportDisplay);
|
2020-12-11 11:09:35 +01:00
|
|
|
TrackerListAdapter trackerAdapter = new TrackerListAdapter(reportDisplay.trackers, R.layout.tracker_item, onTrackerClickListener);
|
2020-12-11 10:20:31 +01:00
|
|
|
|
|
|
|
binding = AppCheckActivityBinding.inflate(getLayoutInflater());
|
2020-12-11 11:09:35 +01:00
|
|
|
binding.reportUrl.setOnClickListener(v -> {
|
|
|
|
Intent intent = new Intent(Intent.ACTION_VIEW);
|
|
|
|
intent.setData(Uri.parse("https://" + Utils.getDomain() + "/reports/" + reportDisplay.report.id + "/"));
|
|
|
|
startActivity(intent);
|
|
|
|
});
|
2020-12-11 10:20:31 +01:00
|
|
|
binding.setReportInfo(viewModel);
|
2020-12-11 11:09:35 +01:00
|
|
|
binding.trackers.setAdapter(trackerAdapter);
|
|
|
|
binding.trackers.setLayoutManager(new LinearLayoutManager(CheckAppActivity.this));
|
2020-12-11 10:20:31 +01:00
|
|
|
View viewRoot = binding.getRoot();
|
|
|
|
setContentView(viewRoot);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onError(String error) {
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onProgress(int resourceId, int progress, int maxProgress) {
|
|
|
|
}
|
2020-12-11 11:09:35 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onTrackerClick(long trackerId) {
|
|
|
|
|
|
|
|
}
|
2020-12-11 10:20:31 +01:00
|
|
|
}
|