Skip to content
This repository was archived by the owner on May 3, 2021. It is now read-only.

Commit 3201021

Browse files
committed
App permissions
1 parent 7c8609b commit 3201021

File tree

9 files changed

+150
-43
lines changed

9 files changed

+150
-43
lines changed

.idea/caches/build_file_checksums.ser

0 Bytes
Binary file not shown.

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ dependencies {
2222
implementation fileTree(dir: 'libs', include: ['*.jar'])
2323
implementation 'com.android.support:appcompat-v7:28.0.0'
2424
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
25-
//implementation project(':applistmanagerlibrary')
25+
implementation project(':applistmanagerlibrary')
2626
testImplementation 'junit:junit:4.12'
2727
androidTestImplementation 'com.android.support.test:runner:1.0.2'
2828
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
2929
implementation 'com.android.support:recyclerview-v7:28.0.0'
30-
implementation 'com.github.LayoutXML:AppListManager:1.1.0'
30+
//implementation 'com.github.LayoutXML:AppListManager:1.1.0'
3131
}

app/src/main/AndroidManifest.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools"
34
package="com.layoutxml.applistmanager">
45

56
<application
@@ -8,7 +9,8 @@
89
android:label="@string/app_name"
910
android:roundIcon="@mipmap/ic_launcher_round"
1011
android:supportsRtl="true"
11-
android:theme="@style/AppTheme">
12+
android:theme="@style/AppTheme"
13+
tools:ignore="GoogleAppIndexingWarning">
1214
<activity android:name=".MainActivity">
1315
<intent-filter>
1416
<action android:name="android.intent.action.MAIN" />

app/src/main/java/com/layoutxml/applistmanager/MainActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public void onClick(View view) {
105105
getAllSystemButton.setOnClickListener(new View.OnClickListener() {
106106
@Override
107107
public void onClick(View view) {
108-
AppList.getSomeApps(getApplicationContext(), ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP, true, 3);
108+
AppList.getSomeApps(getApplicationContext(), ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP, true, null,3);
109109
}
110110
});
111111

applistmanagerlibrary/src/main/java/com/layoutxml/applistmanagerlibrary/AppList.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.content.Intent;
66
import android.content.IntentFilter;
77
import android.content.pm.ApplicationInfo;
8+
import android.content.pm.PackageInfo;
89
import android.content.pm.PackageManager;
910
import android.content.pm.ResolveInfo;
1011
import android.net.Uri;
@@ -78,13 +79,13 @@ public static void registerListeners(AppListener appListener, ActivityListener a
7879

7980
public static void getAllApps(Context context, Integer uniqueIdentifier){
8081
WeakReference<Context> context1 = new WeakReference<>(context);
81-
appTask = new AppTask(context1,null, true, uniqueIdentifier, appListener);
82+
appTask = new AppTask(context1,null, true,null, uniqueIdentifier, appListener);
8283
appTask.execute();
8384
}
8485

85-
public static void getSomeApps(Context context, Integer applicationFlags, Boolean applicationFlagsMatch, Integer uniqueIdentifier){
86+
public static void getSomeApps(Context context, Integer applicationFlags, Boolean applicationFlagsMatch, String[] permissions, Integer uniqueIdentifier){
8687
WeakReference<Context> context1 = new WeakReference<>(context);
87-
appTask = new AppTask(context1, applicationFlags, applicationFlagsMatch, uniqueIdentifier, appListener);
88+
appTask = new AppTask(context1, applicationFlags, applicationFlagsMatch, permissions, uniqueIdentifier, appListener);
8889
appTask.execute();
8990
}
9091

@@ -102,13 +103,13 @@ public static void getSomeActivities(Context context, Intent intent, Integer act
102103

103104
public static void getAllNewApps(Context context, List<AppData> appDataList, Integer uniqueIdentifier) {
104105
WeakReference<Context> context1 = new WeakReference<>(context);
105-
newAppTask = new NewAppTask(context1, appDataList, null, false, uniqueIdentifier, newAppListener);
106+
newAppTask = new NewAppTask(context1, appDataList, null, false, null, uniqueIdentifier, newAppListener);
106107
newAppTask.execute();
107108
}
108109

109-
public static void getSomeNewApps(Context context, List<AppData> appDataList, Integer applicationFlags, Boolean applicationFlagsMatch, Integer uniqueIdentifier) {
110+
public static void getSomeNewApps(Context context, List<AppData> appDataList, Integer applicationFlags, Boolean applicationFlagsMatch, String[] permissions, Integer uniqueIdentifier) {
110111
WeakReference<Context> context1 = new WeakReference<>(context);
111-
newAppTask = new NewAppTask(context1, appDataList, applicationFlags, applicationFlagsMatch, uniqueIdentifier, newAppListener);
112+
newAppTask = new NewAppTask(context1, appDataList, applicationFlags, applicationFlagsMatch, permissions, uniqueIdentifier, newAppListener);
112113
newAppTask.execute();
113114
}
114115

@@ -126,13 +127,13 @@ public static void getSomeNewActivities(Context context, List<AppData> appDataLi
126127

127128
public static void getAllUninstalledApps(Context context, List<AppData> appDataList, Integer uniqueIdentifier) {
128129
WeakReference<Context> context1 = new WeakReference<>(context);
129-
uninstalledAppTask = new UninstalledAppTask(context1, appDataList, null, false, uniqueIdentifier, uninstalledAppListener);
130+
uninstalledAppTask = new UninstalledAppTask(context1, appDataList, null, false, null,uniqueIdentifier, uninstalledAppListener);
130131
uninstalledAppTask.execute();
131132
}
132133

133-
public static void getSomeUninstalledApps(Context context, List<AppData> appDataList, Integer applicationFlags, Boolean applicationFlagsMatch, Integer uniqueIdentifier) {
134+
public static void getSomeUninstalledApps(Context context, List<AppData> appDataList, Integer applicationFlags, Boolean applicationFlagsMatch, String[] permissions, Integer uniqueIdentifier) {
134135
WeakReference<Context> context1 = new WeakReference<>(context);
135-
uninstalledAppTask = new UninstalledAppTask(context1, appDataList, applicationFlags, applicationFlagsMatch, uniqueIdentifier, uninstalledAppListener);
136+
uninstalledAppTask = new UninstalledAppTask(context1, appDataList, applicationFlags, applicationFlagsMatch, permissions, uniqueIdentifier, uninstalledAppListener);
136137
uninstalledAppTask.execute();
137138
}
138139

@@ -216,6 +217,8 @@ public void onReceive(Context context, Intent intent) {
216217
app.setIcon(applicationInfo.loadIcon(packageManager));
217218
app.setName(applicationInfo.loadLabel(packageManager).toString());
218219
app.setFlags(applicationInfo.flags);
220+
PackageInfo packageInfo = packageManager.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS);
221+
app.setPermissions(packageInfo.requestedPermissions);
219222
} catch (PackageManager.NameNotFoundException e) {
220223
e.printStackTrace();
221224
}

applistmanagerlibrary/src/main/java/com/layoutxml/applistmanagerlibrary/objects/AppData.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,15 @@ public class AppData {
1414
private Drawable icon;
1515
private Integer flags;
1616
private String activityName;
17+
private String[] permissions;
18+
19+
public String[] getPermissions() {
20+
return permissions;
21+
}
22+
23+
public void setPermissions(String[] permissions) {
24+
this.permissions = permissions;
25+
}
1726

1827
public String getActivityName() {
1928
return activityName;

applistmanagerlibrary/src/main/java/com/layoutxml/applistmanagerlibrary/tasks/AppTask.java

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.content.Context;
44
import android.content.pm.ApplicationInfo;
5+
import android.content.pm.PackageInfo;
56
import android.content.pm.PackageManager;
67
import android.os.AsyncTask;
78
import com.layoutxml.applistmanagerlibrary.interfaces.AppListener;
@@ -21,13 +22,15 @@ public class AppTask extends AsyncTask<Void,Void,List<AppData>> {
2122
private final Integer flags;
2223
private final Boolean match;
2324
private final Integer uniqueIdentifier;
25+
private final String[] permissions;
2426

25-
public AppTask(WeakReference<Context> context, Integer flags, Boolean match, Integer uniqueIdentifier, WeakReference<AppListener> allListener) {
27+
public AppTask(WeakReference<Context> context, Integer flags, Boolean match, String[] permissions, Integer uniqueIdentifier, WeakReference<AppListener> allListener) {
2628
this.contextWeakReference = context;
2729
this.allAppsListener = allListener;
2830
this.flags = flags;
2931
this.match = match;
3032
this.uniqueIdentifier = uniqueIdentifier;
33+
this.permissions = permissions;
3134
}
3235

3336
@Override
@@ -43,12 +46,40 @@ protected List<AppData> doInBackground(Void... voids){
4346
app.setPackageName(applicationInfo.packageName);
4447
app.setIcon(applicationInfo.loadIcon(packageManager));
4548
app.setFlags(applicationInfo.flags);
46-
if (match) {
47-
if ((flags == null) || ((applicationInfo.flags & flags) != 0))
48-
appDataList.add(app);
49-
} else {
50-
if ((flags == null) || ((applicationInfo.flags & flags) == 0))
51-
appDataList.add(app);
49+
Boolean containsPermission = false;
50+
try {
51+
PackageInfo packageInfo = packageManager.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS);
52+
String[] requestedPermissions = packageInfo.requestedPermissions;
53+
if (permissions!=null) {
54+
if (requestedPermissions != null) {
55+
for (String requestedPermission : requestedPermissions) {
56+
for (String permission : permissions) {
57+
if (requestedPermission.equals(permission)) {
58+
containsPermission = true;
59+
break;
60+
}
61+
}
62+
if (containsPermission)
63+
break;
64+
}
65+
}
66+
} else {
67+
containsPermission = true;
68+
}
69+
app.setPermissions(requestedPermissions);
70+
} catch (PackageManager.NameNotFoundException e) {
71+
e.printStackTrace();
72+
if (permissions==null)
73+
containsPermission=true;
74+
}
75+
if (containsPermission) {
76+
if (match) {
77+
if ((flags == null) || ((applicationInfo.flags & flags) != 0))
78+
appDataList.add(app);
79+
} else {
80+
if ((flags == null) || ((applicationInfo.flags & flags) == 0))
81+
appDataList.add(app);
82+
}
5283
}
5384
if (isCancelled())
5485
break;

applistmanagerlibrary/src/main/java/com/layoutxml/applistmanagerlibrary/tasks/NewAppTask.java

Lines changed: 47 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.content.Context;
44
import android.content.pm.ApplicationInfo;
5+
import android.content.pm.PackageInfo;
56
import android.content.pm.PackageManager;
67
import android.os.AsyncTask;
78

@@ -23,15 +24,17 @@ public class NewAppTask extends AsyncTask<Void,Void,List<AppData>>{
2324
private final Integer flags;
2425
private final Boolean match;
2526
private final Integer uniqueIdentifier;
27+
private final String[] permissions;
2628

2729

28-
public NewAppTask(WeakReference<Context> context, List<AppData> receivedAppList, Integer flags, Boolean match, Integer uniqueIdentifier, WeakReference<NewAppListener> newListener) {
30+
public NewAppTask(WeakReference<Context> context, List<AppData> receivedAppList, Integer flags, Boolean match, String[] permissions, Integer uniqueIdentifier, WeakReference<NewAppListener> newListener) {
2931
contextWeakReference = context;
3032
this.allNewAppsListener = newListener;
3133
this.receivedAppList = receivedAppList;
3234
this.flags = flags;
3335
this.match = match;
3436
this.uniqueIdentifier = uniqueIdentifier;
37+
this.permissions = permissions;
3538
}
3639

3740
@Override
@@ -47,26 +50,54 @@ protected final List<AppData> doInBackground(Void... voids){
4750
app.setPackageName(applicationInfo.packageName);
4851
app.setIcon(applicationInfo.loadIcon(packageManager));
4952
app.setFlags(applicationInfo.flags);
50-
if (receivedAppList != null) {
51-
if (match) {
52-
if ((flags == null) || ((applicationInfo.flags & flags) != 0)) {
53-
if (!receivedAppList.contains(app))
54-
appDataList.add(app);
53+
Boolean containsPermission = false;
54+
try {
55+
PackageInfo packageInfo = packageManager.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS);
56+
String[] requestedPermissions = packageInfo.requestedPermissions;
57+
if (permissions!=null) {
58+
if (requestedPermissions != null) {
59+
for (String requestedPermission : requestedPermissions) {
60+
for (String permission : permissions) {
61+
if (requestedPermission.equals(permission)) {
62+
containsPermission = true;
63+
break;
64+
}
65+
}
66+
if (containsPermission)
67+
break;
68+
}
5569
}
5670
} else {
57-
if ((flags == null) || ((applicationInfo.flags & flags) == 0)) {
58-
if (!receivedAppList.contains(app))
59-
appDataList.add(app);
60-
}
71+
containsPermission = true;
6172
}
62-
} else {
63-
if (match) {
64-
if ((flags == null) || ((applicationInfo.flags & flags) != 0)) {
65-
appDataList.add(app);
73+
app.setPermissions(requestedPermissions);
74+
} catch (PackageManager.NameNotFoundException e) {
75+
e.printStackTrace();
76+
if (permissions==null)
77+
containsPermission=true;
78+
}
79+
if (containsPermission) {
80+
if (receivedAppList != null) {
81+
if (match) {
82+
if ((flags == null) || ((applicationInfo.flags & flags) != 0)) {
83+
if (!receivedAppList.contains(app))
84+
appDataList.add(app);
85+
}
86+
} else {
87+
if ((flags == null) || ((applicationInfo.flags & flags) == 0)) {
88+
if (!receivedAppList.contains(app))
89+
appDataList.add(app);
90+
}
6691
}
6792
} else {
68-
if ((flags == null) || ((applicationInfo.flags & flags) == 0)) {
69-
appDataList.add(app);
93+
if (match) {
94+
if ((flags == null) || ((applicationInfo.flags & flags) != 0)) {
95+
appDataList.add(app);
96+
}
97+
} else {
98+
if ((flags == null) || ((applicationInfo.flags & flags) == 0)) {
99+
appDataList.add(app);
100+
}
70101
}
71102
}
72103
}

applistmanagerlibrary/src/main/java/com/layoutxml/applistmanagerlibrary/tasks/UninstalledAppTask.java

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.content.Context;
44
import android.content.pm.ApplicationInfo;
5+
import android.content.pm.PackageInfo;
56
import android.content.pm.PackageManager;
67
import android.os.AsyncTask;
78

@@ -23,15 +24,17 @@ public class UninstalledAppTask extends AsyncTask<Void,Void,List<AppData>>{
2324
private final Integer uniqueIdentifier;
2425
private final Integer applicationFlags;
2526
private final Boolean applicationFlagsMatch;
27+
private final String[] permissions;
2628

2729

28-
public UninstalledAppTask(WeakReference<Context> context, List<AppData> receivedAppList, Integer applicationFlags, Boolean applicationFlagsMatch, Integer uniqueIdentifier, WeakReference<UninstalledAppListener> uninstalledListener) {
30+
public UninstalledAppTask(WeakReference<Context> context, List<AppData> receivedAppList, Integer applicationFlags, Boolean applicationFlagsMatch, String[] permissions, Integer uniqueIdentifier, WeakReference<UninstalledAppListener> uninstalledListener) {
2931
contextWeakReference = context;
3032
this.allUninstalledAppsListener = uninstalledListener;
3133
this.receivedAppList = receivedAppList;
3234
this.uniqueIdentifier = uniqueIdentifier;
3335
this.applicationFlags = applicationFlags;
3436
this.applicationFlagsMatch = applicationFlagsMatch;
37+
this.permissions = permissions;
3538
}
3639

3740
@Override
@@ -48,13 +51,41 @@ protected final List<AppData> doInBackground(Void... voids){
4851
app.setPackageName(applicationInfo.packageName);
4952
app.setIcon(applicationInfo.loadIcon(packageManager));
5053
app.setFlags(applicationInfo.flags);
51-
if (applicationFlagsMatch) {
52-
if ((applicationFlags == null) || ((app.getFlags() & applicationFlags) != 0)) {
53-
installedAppList.add(app);
54+
Boolean containsPermission = false;
55+
try {
56+
PackageInfo packageInfo = packageManager.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS);
57+
String[] requestedPermissions = packageInfo.requestedPermissions;
58+
if (permissions!=null) {
59+
if (requestedPermissions != null) {
60+
for (String requestedPermission : requestedPermissions) {
61+
for (String permission : permissions) {
62+
if (requestedPermission.equals(permission)) {
63+
containsPermission = true;
64+
break;
65+
}
66+
}
67+
if (containsPermission)
68+
break;
69+
}
70+
}
71+
} else {
72+
containsPermission = true;
5473
}
55-
} else {
56-
if ((applicationFlags == null) || ((app.getFlags() & applicationFlags) == 0)) {
57-
installedAppList.add(app);
74+
app.setPermissions(requestedPermissions);
75+
} catch (PackageManager.NameNotFoundException e) {
76+
e.printStackTrace();
77+
if (permissions==null)
78+
containsPermission=true;
79+
}
80+
if (containsPermission) {
81+
if (applicationFlagsMatch) {
82+
if ((applicationFlags == null) || ((app.getFlags() & applicationFlags) != 0)) {
83+
installedAppList.add(app);
84+
}
85+
} else {
86+
if ((applicationFlags == null) || ((app.getFlags() & applicationFlags) == 0)) {
87+
installedAppList.add(app);
88+
}
5889
}
5990
}
6091
if (isCancelled())

0 commit comments

Comments
 (0)