Change permission and tracker list to RecyclerView
Add permission description (Fix #10) Change permission code to permission label
This commit is contained in:
parent
357500df9a
commit
13289fcfaf
|
@ -0,0 +1,93 @@
|
|||
package org.eu.exodus_privacy.exodusprivacy.adapters;
|
||||
|
||||
import android.databinding.DataBindingUtil;
|
||||
import android.databinding.ViewDataBinding;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import org.eu.exodus_privacy.exodusprivacy.R;
|
||||
import org.eu.exodus_privacy.exodusprivacy.databinding.PermissionItemBinding;
|
||||
import org.eu.exodus_privacy.exodusprivacy.databinding.TrackerItemBinding;
|
||||
import org.eu.exodus_privacy.exodusprivacy.objects.Permission;
|
||||
import org.eu.exodus_privacy.exodusprivacy.objects.Tracker;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class PermissionListAdapter extends RecyclerView.Adapter<PermissionListAdapter.TrackerListViewHolder>{
|
||||
|
||||
private List<Permission> permissionList;
|
||||
|
||||
public PermissionListAdapter(List<Permission> permissions) {
|
||||
setPermisions(permissions);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public PermissionListAdapter.TrackerListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
PermissionItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()),R.layout.permission_item,parent,false);
|
||||
return new TrackerListViewHolder(binding);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull PermissionListAdapter.TrackerListViewHolder holder, int position) {
|
||||
if(permissionList == null || permissionList.size() == 0)
|
||||
holder.setupData(null);
|
||||
else
|
||||
holder.setupData(permissionList.get(position));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if(permissionList == null || permissionList.size() == 0)
|
||||
return 1;
|
||||
else
|
||||
return permissionList.size();
|
||||
}
|
||||
|
||||
public void setPermisions(List<Permission> permisions) {
|
||||
permissionList = permisions;
|
||||
}
|
||||
|
||||
|
||||
class TrackerListViewHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
PermissionItemBinding permissionItemBinding;
|
||||
|
||||
TrackerListViewHolder(PermissionItemBinding dataBinding) {
|
||||
super(dataBinding.getRoot());
|
||||
permissionItemBinding = dataBinding;
|
||||
}
|
||||
|
||||
void setupData(Permission permission) {
|
||||
if(permission != null) {
|
||||
permissionItemBinding.permissionName.setText(permission.name);
|
||||
permissionItemBinding.permissionDescription.setText(permission.description);
|
||||
manageExpanded(permission);
|
||||
permissionItemBinding.mainLayout.setOnClickListener((View.OnClickListener) v -> {
|
||||
permission.expanded = !permission.expanded;
|
||||
manageExpanded(permission);
|
||||
});
|
||||
}
|
||||
else
|
||||
permissionItemBinding.permissionName.setText(R.string.no_permissions);
|
||||
|
||||
}
|
||||
|
||||
void manageExpanded(Permission permission) {
|
||||
if(permission.expanded) {
|
||||
permissionItemBinding.rightArrow.setVisibility(View.GONE);
|
||||
permissionItemBinding.downArrow.setVisibility(View.VISIBLE);
|
||||
permissionItemBinding.permissionDescription.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
permissionItemBinding.rightArrow.setVisibility(View.VISIBLE);
|
||||
permissionItemBinding.downArrow.setVisibility(View.GONE);
|
||||
permissionItemBinding.permissionDescription.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
package org.eu.exodus_privacy.exodusprivacy.adapters;
|
||||
|
||||
import android.databinding.DataBindingUtil;
|
||||
import android.databinding.ViewDataBinding;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import org.eu.exodus_privacy.exodusprivacy.R;
|
||||
import org.eu.exodus_privacy.exodusprivacy.databinding.TrackerItemBinding;
|
||||
import org.eu.exodus_privacy.exodusprivacy.objects.Tracker;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public class TrackerListAdapter extends android.support.v7.widget.RecyclerView.Adapter<TrackerListAdapter.TrackerListViewHolder>{
|
||||
|
||||
private Set<Tracker> trackersList;
|
||||
private int layout;
|
||||
|
||||
public TrackerListAdapter(Set<Tracker> trackerList, int resource) {
|
||||
setTrackers(trackerList);
|
||||
layout = resource;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public TrackerListAdapter.TrackerListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
ViewDataBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()),layout,parent,false);
|
||||
return new TrackerListViewHolder(binding);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull TrackerListAdapter.TrackerListViewHolder holder, int position) {
|
||||
if(trackersList == null || trackersList.size() == 0)
|
||||
holder.setupData(null);
|
||||
else
|
||||
holder.setupData((Tracker) trackersList.toArray()[position]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if(trackersList == null || trackersList.size() == 0)
|
||||
return 1;
|
||||
else
|
||||
return trackersList.size();
|
||||
}
|
||||
|
||||
public void setTrackers(Set<Tracker> trackers) {
|
||||
trackersList = trackers;
|
||||
}
|
||||
|
||||
class TrackerListViewHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
ViewDataBinding viewDataBinding;
|
||||
|
||||
TrackerListViewHolder(ViewDataBinding dataBinding) {
|
||||
super(dataBinding.getRoot());
|
||||
viewDataBinding = dataBinding;
|
||||
}
|
||||
|
||||
void setupData(Tracker tracker) {
|
||||
if(viewDataBinding instanceof TrackerItemBinding) {
|
||||
TrackerItemBinding binding = (TrackerItemBinding) viewDataBinding;
|
||||
if(tracker != null)
|
||||
binding.trackerName.setText(tracker.name);
|
||||
else
|
||||
binding.trackerName.setText(R.string.no_trackers);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -23,8 +23,10 @@ import android.app.Fragment;
|
|||
import android.content.Context;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PermissionInfo;
|
||||
import android.databinding.DataBindingUtil;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
@ -33,8 +35,11 @@ import android.widget.ImageView;
|
|||
import android.widget.TextView;
|
||||
|
||||
import org.eu.exodus_privacy.exodusprivacy.R;
|
||||
import org.eu.exodus_privacy.exodusprivacy.adapters.PermissionListAdapter;
|
||||
import org.eu.exodus_privacy.exodusprivacy.adapters.TrackerListAdapter;
|
||||
import org.eu.exodus_privacy.exodusprivacy.databinding.ReportBinding;
|
||||
import org.eu.exodus_privacy.exodusprivacy.manager.DatabaseManager;
|
||||
import org.eu.exodus_privacy.exodusprivacy.objects.Permission;
|
||||
import org.eu.exodus_privacy.exodusprivacy.objects.Report;
|
||||
import org.eu.exodus_privacy.exodusprivacy.objects.Tracker;
|
||||
|
||||
|
@ -95,18 +100,33 @@ public class ReportFragment extends Fragment {
|
|||
reportBinding.permissionsTitle.setText(permissions_text);
|
||||
|
||||
//setup permissions list
|
||||
//Build html permissions list
|
||||
List<Permission> requestedPermissions = null;
|
||||
if (packageInfo.requestedPermissions != null && packageInfo.requestedPermissions.length > 0) {
|
||||
List<String> requestedPermissions = Arrays.asList(packageInfo.requestedPermissions);
|
||||
String html = buildHtmlList(requestedPermissions);
|
||||
reportBinding.permissions.loadData(html,"text/html","UTF-8");
|
||||
} else {
|
||||
reportBinding.permissions.loadData(getString(R.string.no_permissions),"text/plain", "UTF-8");
|
||||
requestedPermissions = new ArrayList<>();
|
||||
for(int i = 0; i < packageInfo.requestedPermissions.length; i++) {
|
||||
Permission permission = new Permission();
|
||||
permission.fullName = packageInfo.requestedPermissions[i];
|
||||
try {
|
||||
PermissionInfo permissionInfo = packageManager.getPermissionInfo(permission.fullName,PackageManager.GET_META_DATA);
|
||||
if(permissionInfo.loadDescription(packageManager) != null)
|
||||
permission.description = permissionInfo.loadDescription(packageManager).toString();
|
||||
if(permissionInfo.loadLabel(packageManager) != null)
|
||||
permission.name = permissionInfo.loadLabel(packageManager).toString();
|
||||
requestedPermissions.add(permission);
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
reportBinding.permissions.setLayoutManager(new LinearLayoutManager(context));
|
||||
PermissionListAdapter permissionAdapter = new PermissionListAdapter(requestedPermissions);
|
||||
reportBinding.permissions.setAdapter(permissionAdapter);
|
||||
|
||||
|
||||
reportBinding.analysed.setVisibility(View.GONE);
|
||||
reportBinding.trackersTitle.setVisibility(View.VISIBLE);
|
||||
reportBinding.trackers.setVisibility(View.VISIBLE);
|
||||
reportBinding.trackerLayout.setVisibility(View.VISIBLE);
|
||||
|
||||
//get trackers
|
||||
Report report = DatabaseManager.getInstance(context).getReportFor(packageName,versionName);
|
||||
Set<Tracker> trackers = null;
|
||||
|
@ -114,8 +134,7 @@ public class ReportFragment extends Fragment {
|
|||
trackers = DatabaseManager.getInstance(context).getTrackers(report.trackers);
|
||||
} else {
|
||||
reportBinding.analysed.setVisibility(View.VISIBLE);
|
||||
reportBinding.trackersTitle.setVisibility(View.GONE);
|
||||
reportBinding.trackers.setVisibility(View.GONE);
|
||||
reportBinding.trackerLayout.setVisibility(View.GONE);
|
||||
}
|
||||
//setup trackers report
|
||||
String trackers_text;
|
||||
|
@ -126,17 +145,9 @@ public class ReportFragment extends Fragment {
|
|||
reportBinding.trackersTitle.setText(trackers_text);
|
||||
|
||||
//setup trackers lists
|
||||
//build html tracker list
|
||||
if(trackers != null && trackers.size() > 0) {
|
||||
List<String> trackersName = new ArrayList<>();
|
||||
for (Tracker tracker : trackers) {
|
||||
trackersName.add(tracker.name);
|
||||
}
|
||||
String html = buildHtmlList(trackersName);
|
||||
reportBinding.trackers.loadData(html,"text/html","UTF-8");
|
||||
} else {
|
||||
reportBinding.trackers.loadData(getString(R.string.no_trackers),"text/plain","UTF-8");
|
||||
}
|
||||
reportBinding.trackers.setLayoutManager(new LinearLayoutManager(context));
|
||||
TrackerListAdapter trackerAdapter = new TrackerListAdapter(trackers,R.layout.tracker_item);
|
||||
reportBinding.trackers.setAdapter(trackerAdapter);
|
||||
|
||||
//setup creator
|
||||
if(report != null)
|
||||
|
@ -162,15 +173,6 @@ public class ReportFragment extends Fragment {
|
|||
reportBinding.reportUrl.setText("https://reports.exodus-privacy.eu.org/reports/"+report.id+"/");
|
||||
}
|
||||
|
||||
private String buildHtmlList(List<String> list) {
|
||||
String html = "<ul>";
|
||||
for (String item : list) {
|
||||
html += "<li>"+item+"</li>";
|
||||
}
|
||||
html += "</li>";
|
||||
return html;
|
||||
}
|
||||
|
||||
public void setPackageManager(PackageManager packageManager) {
|
||||
this.packageManager = packageManager;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
package org.eu.exodus_privacy.exodusprivacy.objects;
|
||||
|
||||
public class Permission {
|
||||
public String name;
|
||||
public String fullName;
|
||||
public String description;
|
||||
public boolean expanded = false;
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
>
|
||||
<data/>
|
||||
<LinearLayout
|
||||
android:id="@+id/main_layout"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<LinearLayout
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<TextView
|
||||
android:text="▶"
|
||||
android:id="@+id/right_arrow"
|
||||
android:textColor="@android:color/black"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
|
||||
android:layout_marginStart="5dp"
|
||||
android:layout_marginLeft="5dp"
|
||||
/>
|
||||
<TextView
|
||||
android:text="▼"
|
||||
android:id="@+id/down_arrow"
|
||||
android:textColor="@android:color/black"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
|
||||
android:layout_marginStart="5dp"
|
||||
android:layout_marginLeft="5dp"
|
||||
/>
|
||||
<TextView
|
||||
android:id="@+id/permission_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
</LinearLayout>
|
||||
<TextView
|
||||
android:paddingLeft="20dp"
|
||||
android:paddingStart="20dp"
|
||||
android:id="@+id/permission_description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
</LinearLayout>
|
||||
</layout>
|
|
@ -75,6 +75,7 @@
|
|||
>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/tracker_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="50"
|
||||
|
@ -89,8 +90,10 @@
|
|||
android:textAppearance="@style/TextAppearance.AppCompat.Large"
|
||||
android:textColor="@android:color/white" />
|
||||
|
||||
<WebView
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/trackers"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
|
@ -110,9 +113,10 @@
|
|||
android:textColor="@android:color/white"
|
||||
/>
|
||||
|
||||
<WebView
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/permissions"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
/>
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
>
|
||||
<data/>
|
||||
<LinearLayout
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<TextView
|
||||
android:text="●"
|
||||
android:textColor="@android:color/black"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
|
||||
android:layout_marginStart="5dp"
|
||||
android:layout_marginLeft="5dp"
|
||||
/>
|
||||
<TextView
|
||||
android:id="@+id/tracker_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
</LinearLayout>
|
||||
</layout>
|
Loading…
Reference in New Issue