diff --git a/app/build.gradle b/app/build.gradle index 91bfcfa..d96799a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,6 +21,9 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + dataBinding { + enabled = true + } } dependencies { @@ -28,9 +31,9 @@ dependencies { androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - compile 'com.android.support:appcompat-v7:27.0.2' + compile 'com.android.support:appcompat-v7:27.1.0' compile 'com.android.support.constraint:constraint-layout:1.0.2' - compile 'com.android.support:design:27.0.2' - compile 'com.android.support:recyclerview-v7:27.0.2' + compile 'com.android.support:design:27.1.0' + compile 'com.android.support:recyclerview-v7:27.1.0' testCompile 'junit:junit:4.12' } diff --git a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/MainActivity.java b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/MainActivity.java index 946860b..82aa28c 100644 --- a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/MainActivity.java +++ b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/MainActivity.java @@ -20,11 +20,13 @@ package org.eu.exodus_privacy.exodusprivacy; import android.app.FragmentManager; import android.app.FragmentTransaction; +import android.databinding.DataBindingUtil; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import org.eu.exodus_privacy.exodusprivacy.adapters.ApplicationListAdapter; +import org.eu.exodus_privacy.exodusprivacy.databinding.MainBinding; import org.eu.exodus_privacy.exodusprivacy.fragments.AppListFragment; import org.eu.exodus_privacy.exodusprivacy.fragments.ReportFragment; import org.eu.exodus_privacy.exodusprivacy.listener.NetworkListener; @@ -37,7 +39,7 @@ public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.main); + final MainBinding mainBinding = DataBindingUtil.setContentView(this,R.layout.main); NetworkListener networkListener = new NetworkListener() { @Override @@ -45,7 +47,7 @@ public class MainActivity extends AppCompatActivity { runOnUiThread(() -> { appList.updateComplete(); if(report != null) - report.updateComplete(null); + report.updateComplete(); }); } @@ -54,7 +56,7 @@ public class MainActivity extends AppCompatActivity { public void onError(String error) { runOnUiThread(() -> { appList.updateComplete(); - Snackbar bar = Snackbar.make(findViewById(R.id.fragment_container),error,Snackbar.LENGTH_LONG); + Snackbar bar = Snackbar.make(mainBinding.fragmentContainer,error,Snackbar.LENGTH_LONG); bar.show(); }); } diff --git a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/adapters/ApplicationListAdapter.java b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/adapters/ApplicationListAdapter.java index 59e65c7..946dbe9 100644 --- a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/adapters/ApplicationListAdapter.java +++ b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/adapters/ApplicationListAdapter.java @@ -18,8 +18,10 @@ package org.eu.exodus_privacy.exodusprivacy.adapters; +import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.databinding.DataBindingUtil; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; @@ -28,6 +30,7 @@ import android.widget.ImageView; import android.widget.TextView; import org.eu.exodus_privacy.exodusprivacy.R; +import org.eu.exodus_privacy.exodusprivacy.databinding.AppItemBinding; import org.eu.exodus_privacy.exodusprivacy.manager.DatabaseManager; import org.eu.exodus_privacy.exodusprivacy.objects.Report; import org.eu.exodus_privacy.exodusprivacy.objects.Tracker; @@ -44,7 +47,7 @@ public class ApplicationListAdapter extends android.support.v7.widget.RecyclerVi private List packages; private PackageManager packageManager; private OnAppClickListener onAppClickListener; - private final String gStore = "com.android.vending"; + private static final String gStore = "com.android.vending"; private Comparator alphaPackageComparator = new Comparator() { @Override @@ -55,10 +58,9 @@ public class ApplicationListAdapter extends android.support.v7.widget.RecyclerVi } }; - public ApplicationListAdapter(List installedPackages, PackageManager manager, OnAppClickListener listener) { - packageManager = manager; + public ApplicationListAdapter(PackageManager manager, OnAppClickListener listener) { onAppClickListener = listener; - setInstalledPackages(installedPackages); + setPackageManager(manager); } private void setInstalledPackages(List installedPackages) { @@ -80,8 +82,8 @@ public class ApplicationListAdapter extends android.support.v7.widget.RecyclerVi @Override public ApplicationListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.app_item,parent,false); - return new ApplicationListViewHolder(v); + AppItemBinding appItemBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()),R.layout.app_item,parent,false); + return new ApplicationListViewHolder(appItemBinding); } @Override @@ -102,35 +104,31 @@ public class ApplicationListAdapter extends android.support.v7.widget.RecyclerVi public void setPackageManager(PackageManager manager) { packageManager = manager; + if(packageManager != null) { + List installedPackages = packageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS); + setInstalledPackages(installedPackages); + } } class ApplicationListViewHolder extends RecyclerView.ViewHolder { - ImageView app_logo; - TextView app_name; - TextView app_permission_nb; - TextView app_tracker_nb; - TextView tested; - TextView analysed; PackageInfo packageInfo; + AppItemBinding appItemBinding; - ApplicationListViewHolder(View itemView) { - super(itemView); - app_logo = itemView.findViewById(R.id.app_logo); - app_name = itemView.findViewById(R.id.app_name); - app_permission_nb = itemView.findViewById(R.id.app_permission_nb); - app_tracker_nb = itemView.findViewById(R.id.app_tracker_nb); - tested = itemView.findViewById(R.id.other_version); - analysed = itemView.findViewById(R.id.analysed); + ApplicationListViewHolder(AppItemBinding binding) { + super(binding.getRoot()); + appItemBinding = binding; } public void setData(PackageInfo data) { packageInfo = data; + Context context = appItemBinding.getRoot().getContext(); + //reinit view state - tested.setVisibility(View.GONE); - analysed.setVisibility(View.GONE); - app_tracker_nb.setVisibility(View.VISIBLE); + appItemBinding.otherVersion.setVisibility(View.GONE); + appItemBinding.analysed.setVisibility(View.GONE); + appItemBinding.appTrackerNb.setVisibility(View.VISIBLE); String packageName = packageInfo.packageName; @@ -138,31 +136,31 @@ public class ApplicationListAdapter extends android.support.v7.widget.RecyclerVi //get logo try { - app_logo.setImageDrawable(packageManager.getApplicationIcon(packageName)); + appItemBinding.appLogo.setImageDrawable(packageManager.getApplicationIcon(packageName)); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } //get name - app_name.setText(packageManager.getApplicationLabel(packageInfo.applicationInfo)); + appItemBinding.appName.setText(packageManager.getApplicationLabel(packageInfo.applicationInfo)); //get permissions if(packageInfo.requestedPermissions != null) { - app_permission_nb.setText(app_name.getContext().getString(R.string.permissions) + " " + String.valueOf(data.requestedPermissions.length)); + appItemBinding.appPermissionNb.setText(context.getString(R.string.permissions) + " " + String.valueOf(data.requestedPermissions.length)); } else { - app_permission_nb.setText(app_name.getContext().getString(R.string.permissions) + " " + String.valueOf(0)); + appItemBinding.appPermissionNb.setText(context.getString(R.string.permissions) + " " + String.valueOf(0)); } //get reports - Report report = DatabaseManager.getInstance(app_logo.getContext()).getReportFor(packageName, versionName); + Report report = DatabaseManager.getInstance(context).getReportFor(packageName, versionName); if(report != null) { - Set trackers = DatabaseManager.getInstance(app_logo.getContext()).getTrackers(report.trackers); - app_tracker_nb.setText(app_name.getContext().getString(R.string.trackers) + " " + trackers.size()); + Set trackers = DatabaseManager.getInstance(context).getTrackers(report.trackers); + appItemBinding.appTrackerNb.setText(context.getString(R.string.trackers) + " " + trackers.size()); if(!report.version.equals(data.versionName)) { - tested.setVisibility(View.VISIBLE); + appItemBinding.otherVersion.setVisibility(View.VISIBLE); } } else { - app_tracker_nb.setVisibility(View.GONE); - analysed.setVisibility(View.VISIBLE); + appItemBinding.appTrackerNb.setVisibility(View.GONE); + appItemBinding.analysed.setVisibility(View.VISIBLE); } } } diff --git a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/fragments/AppListFragment.java b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/fragments/AppListFragment.java index 92e6013..5a674ff 100644 --- a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/fragments/AppListFragment.java +++ b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/fragments/AppListFragment.java @@ -23,6 +23,7 @@ import android.app.Fragment; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.databinding.DataBindingUtil; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.widget.SwipeRefreshLayout; @@ -37,6 +38,7 @@ import android.widget.TextView; import org.eu.exodus_privacy.exodusprivacy.R; import org.eu.exodus_privacy.exodusprivacy.adapters.ApplicationListAdapter; +import org.eu.exodus_privacy.exodusprivacy.databinding.ApplistBinding; import org.eu.exodus_privacy.exodusprivacy.listener.NetworkListener; import org.eu.exodus_privacy.exodusprivacy.manager.NetworkManager; @@ -50,6 +52,7 @@ public class AppListFragment extends Fragment { private NetworkListener networkListener; private ApplicationListAdapter.OnAppClickListener onAppClickListener; private boolean startupRefresh; + private ApplistBinding applistBinding; public static AppListFragment newInstance(NetworkListener networkListener, ApplicationListAdapter.OnAppClickListener appClickListener) { AppListFragment fragment = new AppListFragment(); @@ -66,68 +69,58 @@ public class AppListFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.applist,container,false); + applistBinding = DataBindingUtil.inflate(inflater,R.layout.applist,container,false); + return applistBinding.getRoot(); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - View v = getView(); - if(v == null) + if(applistBinding == null) return; - RecyclerView app_list = v.findViewById(R.id.app_list); - SwipeRefreshLayout refresh = v.findViewById(R.id.swipe_refresh); - refresh.setOnRefreshListener(() -> startRefresh(getView())); + Context context = applistBinding.getRoot().getContext(); + applistBinding.swipeRefresh.setOnRefreshListener(() -> startRefresh()); if (packageManager == null) - packageManager = v.getContext().getPackageManager(); + packageManager = context.getPackageManager(); - app_list.setLayoutManager(new LinearLayoutManager(v.getContext())); - TextView nopm = v.findViewById(R.id.no_package_manager); - TextView noappfound = v.findViewById(R.id.no_app_found); + applistBinding.appList.setLayoutManager(new LinearLayoutManager(context)); if (packageManager != null) { if(startupRefresh) { - startRefresh(v); + startRefresh(); startupRefresh = false; } - nopm.setVisibility(View.GONE); - noappfound.setVisibility(View.GONE); - ApplicationListAdapter adapter = new ApplicationListAdapter(packageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS), packageManager, onAppClickListener); + applistBinding.noPackageManager.setVisibility(View.GONE); + applistBinding.noAppFound.setVisibility(View.GONE); + ApplicationListAdapter adapter = new ApplicationListAdapter(packageManager, onAppClickListener); if(adapter.getItemCount() == 0) { - noappfound.setVisibility(View.VISIBLE); + applistBinding.noAppFound.setVisibility(View.VISIBLE); } else { - app_list.setAdapter(adapter); + applistBinding.appList.setAdapter(adapter); } } else { - nopm.setVisibility(View.VISIBLE); + applistBinding.noPackageManager.setVisibility(View.VISIBLE); } } - public void startRefresh(View v){ - if(v == null) + public void startRefresh(){ + if(applistBinding == null) return; - LinearLayout layout = v.findViewById(R.id.layout_progress); - layout.setVisibility(View.VISIBLE); - SwipeRefreshLayout refresh = v.findViewById(R.id.swipe_refresh); - refresh.setRefreshing(true); + applistBinding.layoutProgress.setVisibility(View.VISIBLE); + applistBinding.swipeRefresh.setRefreshing(true); List packageInstalled = packageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS); ArrayList packageList = new ArrayList<>(); for(PackageInfo pkgInfo : packageInstalled) packageList.add(pkgInfo.packageName); - NetworkManager.getInstance().getReports(v.getContext(),networkListener,packageList); + NetworkManager.getInstance().getReports(applistBinding.getRoot().getContext(),networkListener,packageList); } public void updateComplete() { - View v = getView(); - if(v != null) { - LinearLayout layout = v.findViewById(R.id.layout_progress); - layout.setVisibility(View.GONE); - SwipeRefreshLayout refresh = v.findViewById(R.id.swipe_refresh); - refresh.setRefreshing(false); - RecyclerView app_list = v.findViewById(R.id.app_list); - if(packageManager != null && app_list.getAdapter() != null) { - ((ApplicationListAdapter) app_list.getAdapter()).setPackageManager(packageManager); - app_list.getAdapter().notifyDataSetChanged(); + if(applistBinding != null) { + applistBinding.layoutProgress.setVisibility(View.GONE); + applistBinding.swipeRefresh.setRefreshing(false); + if(packageManager != null && applistBinding.appList.getAdapter() != null) { + ((ApplicationListAdapter) applistBinding.appList.getAdapter()).setPackageManager(packageManager); } } } @@ -155,17 +148,14 @@ public class AppListFragment extends Fragment { if(activity == null) return; activity.runOnUiThread(() -> { - View v = getView(); - if (v == null) + if (applistBinding == null) return; - TextView status = v.findViewById(R.id.status_progress); if(maxProgress > 0) - status.setText(getString(resourceId)+" "+progress+"/"+maxProgress); + applistBinding.statusProgress.setText(getString(resourceId)+" "+progress+"/"+maxProgress); else - status.setText(getString(resourceId)); - ProgressBar progressBar = v.findViewById(R.id.progress); - progressBar.setMax(maxProgress); - progressBar.setProgress(progress); + applistBinding.statusProgress.setText(getString(resourceId)); + applistBinding.progress.setMax(maxProgress); + applistBinding.progress.setProgress(progress); }); } 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 479c617..a714fa8 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 @@ -23,6 +23,7 @@ import android.app.Fragment; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.databinding.DataBindingUtil; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -32,6 +33,7 @@ import android.widget.ImageView; import android.widget.TextView; import org.eu.exodus_privacy.exodusprivacy.R; +import org.eu.exodus_privacy.exodusprivacy.databinding.ReportBinding; import org.eu.exodus_privacy.exodusprivacy.manager.DatabaseManager; import org.eu.exodus_privacy.exodusprivacy.objects.Report; import org.eu.exodus_privacy.exodusprivacy.objects.Tracker; @@ -45,6 +47,7 @@ public class ReportFragment extends Fragment { private PackageManager packageManager; private PackageInfo packageInfo; + private ReportBinding reportBinding; public static ReportFragment newInstance(PackageManager packageManager, PackageInfo packageInfo) { ReportFragment fragment = new ReportFragment(); @@ -62,70 +65,57 @@ public class ReportFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View v = inflater.inflate(R.layout.report, container, false); - updateComplete(v); - return v; + reportBinding = DataBindingUtil.inflate(inflater,R.layout.report,container,false); + updateComplete(); + return reportBinding.getRoot(); } - public void updateComplete(View v) { - if(v == null) { - v = getView(); - if (v == null) - return; - } - Context context = v.getContext(); - + public void updateComplete() { + Context context = reportBinding.getRoot().getContext(); String packageName = packageInfo.packageName; String versionName = packageInfo.versionName; //setup logo - ImageView app_logo = v.findViewById(R.id.logo); try { - app_logo.setImageDrawable(packageManager.getApplicationIcon(packageName)); + reportBinding.logo.setImageDrawable(packageManager.getApplicationIcon(packageName)); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } //setup name - TextView app_name = v.findViewById(R.id.name); - app_name.setText(packageManager.getApplicationLabel(packageInfo.applicationInfo)); + reportBinding.name.setText(packageManager.getApplicationLabel(packageInfo.applicationInfo)); //setup permissions number - TextView permissions_title = v.findViewById(R.id.permissions_title); String permissions_text; if (packageInfo.requestedPermissions != null && packageInfo.requestedPermissions.length > 0) permissions_text = context.getString(R.string.permissions) + " " + String.valueOf(packageInfo.requestedPermissions.length); else permissions_text = context.getString(R.string.permissions); - permissions_title.setText(permissions_text); + reportBinding.permissionsTitle.setText(permissions_text); //setup permissions list - WebView permissionList = v.findViewById(R.id.permissions); //Build html permissions list if (packageInfo.requestedPermissions != null && packageInfo.requestedPermissions.length > 0) { List requestedPermissions = Arrays.asList(packageInfo.requestedPermissions); String html = buildHtmlList(requestedPermissions); - permissionList.loadData(html,"text/html","UTF-8"); + reportBinding.permissions.loadData(html,"text/html","UTF-8"); } else { - permissionList.loadData(getString(R.string.no_permissions),"text/plain", "UTF-8"); + reportBinding.permissions.loadData(getString(R.string.no_permissions),"text/plain", "UTF-8"); } - TextView analysed = v.findViewById(R.id.analysed); - TextView trackers_title = v.findViewById(R.id.trackers_title); - WebView trackersList = v.findViewById(R.id.trackers); - analysed.setVisibility(View.GONE); - trackers_title.setVisibility(View.VISIBLE); - trackersList.setVisibility(View.VISIBLE); + reportBinding.analysed.setVisibility(View.GONE); + reportBinding.trackersTitle.setVisibility(View.VISIBLE); + reportBinding.trackers.setVisibility(View.VISIBLE); //get trackers Report report = DatabaseManager.getInstance(context).getReportFor(packageName,versionName); Set trackers = null; if(report != null) { trackers = DatabaseManager.getInstance(context).getTrackers(report.trackers); } else { - analysed.setVisibility(View.VISIBLE); - trackers_title.setVisibility(View.GONE); - trackersList.setVisibility(View.GONE); + reportBinding.analysed.setVisibility(View.VISIBLE); + reportBinding.trackersTitle.setVisibility(View.GONE); + reportBinding.trackers.setVisibility(View.GONE); } //setup trackers report String trackers_text; @@ -133,7 +123,7 @@ public class ReportFragment extends Fragment { trackers_text = context.getString(R.string.trackers)+" "+String.valueOf(trackers.size()); else trackers_text = context.getString(R.string.trackers); - trackers_title.setText(trackers_text); + reportBinding.trackersTitle.setText(trackers_text); //setup trackers lists //build html tracker list @@ -143,36 +133,33 @@ public class ReportFragment extends Fragment { trackersName.add(tracker.name); } String html = buildHtmlList(trackersName); - trackersList.loadData(html,"text/html","UTF-8"); + reportBinding.trackers.loadData(html,"text/html","UTF-8"); } else { - trackersList.loadData(getString(R.string.no_trackers),"text/plain","UTF-8"); + reportBinding.trackers.loadData(getString(R.string.no_trackers),"text/plain","UTF-8"); } //setup creator - TextView creators = v.findViewById(R.id.creator); if(report != null) - creators.setText(DatabaseManager.getInstance(context).getCreator(report.appId)); + reportBinding.creator.setText(DatabaseManager.getInstance(context).getCreator(report.appId)); else - creators.setVisibility(View.GONE); + reportBinding.creator.setVisibility(View.GONE); //setup installed - TextView installed = v.findViewById(R.id.installed_version); String installed_str = context.getString(R.string.installed) +" "+ versionName; - installed.setText(installed_str); + reportBinding.installedVersion.setText(installed_str); //setup reportversion - TextView reportVersion = v.findViewById(R.id.report_version); + reportBinding.reportVersion.setVisibility(View.VISIBLE); if(report != null && !report.version.equals(versionName)) { String report_str = context.getString(R.string.report_version)+" "+report.version; - reportVersion.setText(report_str); + reportBinding.reportVersion.setText(report_str); } else - reportVersion.setVisibility(View.GONE); + reportBinding.reportVersion.setVisibility(View.GONE); //setup report url - TextView url = v.findViewById(R.id.report_url); if(report != null) - url.setText("https://reports.exodus-privacy.eu.org/reports/"+report.id+"/"); + reportBinding.reportUrl.setText("https://reports.exodus-privacy.eu.org/reports/"+report.id+"/"); } private String buildHtmlList(List list) { diff --git a/app/src/main/res/layout/app_item.xml b/app/src/main/res/layout/app_item.xml index eec7d9f..dab2818 100644 --- a/app/src/main/res/layout/app_item.xml +++ b/app/src/main/res/layout/app_item.xml @@ -1,68 +1,74 @@ - - + + - - - - + android:layout_height="wrap_content" + android:gravity="center"> - + + + + + + + + + + + + + - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/applist.xml b/app/src/main/res/layout/applist.xml index f32622a..4e3788b 100644 --- a/app/src/main/res/layout/applist.xml +++ b/app/src/main/res/layout/applist.xml @@ -1,71 +1,76 @@ - - - + + + android:layout_height="match_parent" + > + + + + + + + android:layout_height="match_parent" + android:gravity="center" + android:text="@string/no_package_manager" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - - + android:layout_height="match_parent" + android:gravity="center" + android:text="@string/no_app_found" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - + - + + - - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/main.xml b/app/src/main/res/layout/main.xml index 96795ed..6619d50 100644 --- a/app/src/main/res/layout/main.xml +++ b/app/src/main/res/layout/main.xml @@ -1,24 +1,24 @@ - - - - - + tools:context="org.eu.exodus_privacy.exodusprivacy.MainActivity" + > + + + \ No newline at end of file diff --git a/app/src/main/res/layout/report.xml b/app/src/main/res/layout/report.xml index 42d32cf..2efc4c3 100644 --- a/app/src/main/res/layout/report.xml +++ b/app/src/main/res/layout/report.xml @@ -1,116 +1,122 @@ - - + + - - + android:layout_height="match_parent"> - - - - - - + + + + > + + + + + + + - - - - + android:layout_height="match_parent" + android:layout_weight="50" + android:orientation="vertical"> - + + + + + + android:layout_height="match_parent"> + - - - - - - - \ No newline at end of file + + + + + \ No newline at end of file