FP2-1725 : Fixed Privacy Impact ignoring deleted apps
Privacy Impact was ignoring re-installed apps.
Change-Id: I3faa2f34eef32685531fdd4d4c7eacf529c5cdf3
diff --git a/core/java/android/os/IPrivacyImpactService.aidl b/core/java/android/os/IPrivacyImpactService.aidl
index 8768b6a..7dfb97e 100644
--- a/core/java/android/os/IPrivacyImpactService.aidl
+++ b/core/java/android/os/IPrivacyImpactService.aidl
@@ -6,6 +6,7 @@
interface IPrivacyImpactService {
boolean showPackagePrivacy(String packageName);
void disablePackagePrivacy(String packageName);
+ void enablePackagePrivacy(String packageName);
void clearPackagePrivacyData();
boolean isPrivacyImpactEnabled();
void setPrivacyImpactStatus(boolean enabled);
diff --git a/packages/FairphonePrivacyImpact/AndroidManifest.xml b/packages/FairphonePrivacyImpact/AndroidManifest.xml
index 26ca98b..1d326b2 100644
--- a/packages/FairphonePrivacyImpact/AndroidManifest.xml
+++ b/packages/FairphonePrivacyImpact/AndroidManifest.xml
@@ -54,6 +54,16 @@
</intent-filter>
</activity>
+ <receiver
+ android:name="com.fairphone.privacyimpact.PackageRemovedReceiver"
+ android:enabled="true"
+ android:exported="true">
+ <intent-filter>
+ <action android:name="android.intent.action.PACKAGE_REMOVED" />
+ <data android:scheme="package"/>
+ </intent-filter>
+ </receiver>
+
</application>
</manifest>
diff --git a/packages/FairphonePrivacyImpact/src/com/fairphone/privacyimpact/PackageRemovedReceiver.java b/packages/FairphonePrivacyImpact/src/com/fairphone/privacyimpact/PackageRemovedReceiver.java
new file mode 100644
index 0000000..f7ea11d
--- /dev/null
+++ b/packages/FairphonePrivacyImpact/src/com/fairphone/privacyimpact/PackageRemovedReceiver.java
@@ -0,0 +1,36 @@
+package com.fairphone.privacyimpact;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.util.Log;
+import android.net.Uri;
+
+import com.fairphone.privacyimpact.database.AppSettingsDatabaseHelper;
+
+/**
+ * Created by kwamecorp on 1/12/16.
+ */
+public class PackageRemovedReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED)){
+ PackageManager pm = context.getPackageManager();
+// String[] packageNames = pm.getPackagesForUid(intent.getIntExtra(Intent.EXTRA_UID, 0));
+ String packageName = getPackageName(intent);
+
+ if(packageName != null)
+ {
+ AppSettingsDatabaseHelper.removePackageName(packageName);
+ }
+ }
+}
+ private String getPackageName(Intent intent) {
+ Uri uri = intent.getData();
+ String pkg = uri != null ? uri.getSchemeSpecificPart() : null;
+ return pkg;
+ }
+
+
+}
diff --git a/packages/FairphonePrivacyImpact/src/com/fairphone/privacyimpact/database/AppSettingsDatabaseHelper.java b/packages/FairphonePrivacyImpact/src/com/fairphone/privacyimpact/database/AppSettingsDatabaseHelper.java
index 19cef1d..8e9c22f 100644
--- a/packages/FairphonePrivacyImpact/src/com/fairphone/privacyimpact/database/AppSettingsDatabaseHelper.java
+++ b/packages/FairphonePrivacyImpact/src/com/fairphone/privacyimpact/database/AppSettingsDatabaseHelper.java
@@ -29,6 +29,16 @@
Log.e(TAG, "Failed to set package "+packageName+" from service", e);
}
}
+
+ public static void removePackageName(String packageName){
+ try {
+ IPrivacyImpactService pis = IPrivacyImpactService.Stub.asInterface(ServiceManager.getService("PrivacyImpact"));
+ pis.enablePackagePrivacy(packageName);
+ } catch (Exception e) {
+ Log.e(TAG, "Failed to remove package "+packageName+" from service", e);
+ }
+ }
+
public static void resetPrivacyDatabase(){
try {
diff --git a/services/core/java/com/android/server/am/PrivacyImpactService.java b/services/core/java/com/android/server/am/PrivacyImpactService.java
index 62add20..139a82e 100644
--- a/services/core/java/com/android/server/am/PrivacyImpactService.java
+++ b/services/core/java/com/android/server/am/PrivacyImpactService.java
@@ -316,6 +316,14 @@
db.insert(TABLE_NAME, null, values);
}
+
+ public void enablePackagePrivacy(String packageName) {
+ Log.i(TAG, "Removing Package name: " + packageName);
+ SQLiteDatabase db = mHelper.getWritableDatabase();
+
+ int result = db.delete(TABLE_NAME, COLUMN_PACKAGE_NAME + " = ?", new String[]{packageName});
+ }
+
public void clearPackagePrivacyData() {
Log.i(TAG, "Clearing Privacy Impact database");