Monitor package (un)install events

This commit is contained in:
topjohnwu
2017-05-31 16:31:33 +08:00
parent a573baea03
commit 29096eb5d7
10 changed files with 107 additions and 34 deletions
@@ -37,11 +37,11 @@ public class SuDatabaseHelper extends SQLiteOpenHelper {
// Currently new database, no upgrading
}
public boolean deletePolicy(int uid) {
public boolean deletePolicy(Policy policy) {
SQLiteDatabase db = getWritableDatabase();
db.delete(TABLE_NAME, "uid=?", new String[] { String.valueOf(uid) });
db.delete(TABLE_NAME, "package_name=?", new String[] { policy.packageName });
db.close();
return getPolicy(uid) == null;
return getPolicy(policy.packageName) == null;
}
public Policy getPolicy(int uid) {
@@ -56,27 +56,42 @@ public class SuDatabaseHelper extends SQLiteOpenHelper {
return policy;
}
public Policy getPolicy(String pkg) {
Policy policy = null;
SQLiteDatabase db = getReadableDatabase();
try (Cursor c = db.query(TABLE_NAME, null, "package_name=?", new String[] { pkg }, null, null, null)) {
if (c.moveToNext()) {
policy = new Policy(c);
}
}
db.close();
return policy;
}
public void addPolicy(Policy policy) {
SQLiteDatabase db = getWritableDatabase();
db.replace(TABLE_NAME, null, policy.getContentValues());
db.close();
}
public void updatePolicy(Policy policy) {
SQLiteDatabase db = getWritableDatabase();
db.update(TABLE_NAME, policy.getContentValues(), "package_name=?",
new String[] { policy.packageName });
db.close();
}
public List<Policy> getPolicyList(PackageManager pm) {
List<Policy> ret = new ArrayList<>();
SQLiteDatabase db = getWritableDatabase();
Policy policy;
// Clear outdated policies
db.delete(TABLE_NAME, "until > 0 and until < ?", new String[] { String.valueOf(System.currentTimeMillis()) });
db.delete(TABLE_NAME, "until > 0 AND until < ?",
new String[] { String.valueOf(System.currentTimeMillis()) });
try (Cursor c = db.query(TABLE_NAME, null, null, null, null, null, "app_name ASC")) {
while (c.moveToNext()) {
policy = new Policy(c);
// Package is uninstalled
if (pm.getPackagesForUid(policy.uid) == null) {
deletePolicy(policy.uid);
} else {
ret.add(policy);
}
ret.add(policy);
}
}
db.close();