summaryrefslogtreecommitdiffstats
path: root/src/com/android
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android')
-rw-r--r--src/com/android/settings/applications/InstalledAppDetails.java28
-rw-r--r--src/com/android/settings/cyanogenmod/privacyguard/PrivacyGuardManager.java21
2 files changed, 41 insertions, 8 deletions
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 778ef44..4091b13 100644
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -401,10 +401,19 @@ public class InstalledAppDetails extends Fragment
}
private void initPrivacyGuardButton() {
- // TODO: We probably want to disable this optional for the built-in apps
- boolean enabled = mPm.getPrivacyGuardSetting(mAppEntry.info.packageName);
- mPrivacyGuardSwitch.setChecked(enabled);
- mPrivacyGuardSwitch.setOnCheckedChangeListener(this);
+ if (mPrivacyGuardSwitch == null) {
+ return;
+ }
+
+ mPrivacyGuardSwitch.setChecked(mPm.getPrivacyGuardSetting(mAppEntry.info.packageName));
+
+ // disable privacy guard switch if the app is signed with the platform certificate
+ // to avoid the user shooting himself in the foot
+ if (isThisASystemPackage()) {
+ mPrivacyGuardSwitch.setEnabled(false);
+ } else {
+ mPrivacyGuardSwitch.setOnCheckedChangeListener(this);
+ }
}
/** Called when the activity is first created. */
@@ -1201,10 +1210,17 @@ public class InstalledAppDetails extends Fragment
.setNegativeButton(R.string.dlg_cancel, null)
.create();
case DLG_PRIVACY_GUARD:
+ final int messageResId;
+ if ((getOwner().mAppEntry.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
+ messageResId = R.string.privacy_guard_dlg_system_app_text;
+ } else {
+ messageResId = R.string.privacy_guard_dlg_text;
+ }
+
return new AlertDialog.Builder(getActivity())
- .setTitle(getActivity().getText(R.string.privacy_guard_dlg_title))
+ .setTitle(R.string.privacy_guard_dlg_title)
.setIconAttribute(android.R.attr.alertDialogIcon)
- .setMessage(getActivity().getText(R.string.privacy_guard_dlg_text))
+ .setMessage(messageResId)
.setPositiveButton(R.string.dlg_ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
diff --git a/src/com/android/settings/cyanogenmod/privacyguard/PrivacyGuardManager.java b/src/com/android/settings/cyanogenmod/privacyguard/PrivacyGuardManager.java
index efb05a4..9e27147 100644
--- a/src/com/android/settings/cyanogenmod/privacyguard/PrivacyGuardManager.java
+++ b/src/com/android/settings/cyanogenmod/privacyguard/PrivacyGuardManager.java
@@ -27,6 +27,7 @@ import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
+import android.content.pm.Signature;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
@@ -195,14 +196,30 @@ public class PrivacyGuardManager extends Fragment
*/
private List<AppInfo> loadInstalledApps() {
List<AppInfo> apps = new ArrayList<AppInfo>();
- List<PackageInfo> packages = mPm.getInstalledPackages(PackageManager.GET_PERMISSIONS);
+ List<PackageInfo> packages = mPm.getInstalledPackages(
+ PackageManager.GET_PERMISSIONS | PackageManager.GET_SIGNATURES);
boolean showSystemApps = shouldShowSystemApps();
boolean filterByPermission = shouldFilterByPermission();
+ Signature platformCert;
+
+ try {
+ PackageInfo sysInfo = mPm.getPackageInfo("android", PackageManager.GET_SIGNATURES);
+ platformCert = sysInfo.signatures[0];
+ } catch (PackageManager.NameNotFoundException e) {
+ platformCert = null;
+ }
for (PackageInfo info : packages) {
final ApplicationInfo appInfo = info.applicationInfo;
- // skip system apps if they shall not be included
+ // hide apps signed with the platform certificate to avoid the user
+ // shooting himself in the foot
+ if (platformCert != null && info.signatures != null
+ && platformCert.equals(info.signatures[0])) {
+ continue;
+ }
+
+ // skip all system apps if they shall not be included
if (!showSystemApps && (appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
continue;
}