summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/xml/security_settings_misc.xml3
-rw-r--r--src/com/android/settings/DreamBackend.java57
-rw-r--r--src/com/android/settings/SecuritySettings.java82
3 files changed, 95 insertions, 47 deletions
diff --git a/res/xml/security_settings_misc.xml b/res/xml/security_settings_misc.xml
index 6f9311a..41a84b9 100644
--- a/res/xml/security_settings_misc.xml
+++ b/res/xml/security_settings_misc.xml
@@ -60,7 +60,8 @@
android:persistent="false" />
</PreferenceCategory>
- <PreferenceCategory android:title="@string/credentials_title"
+ <PreferenceCategory android:key="credentials_management"
+ android:title="@string/credentials_title"
android:persistent="false">
<Preference android:title="@string/trusted_credentials"
android:summary="@string/trusted_credentials_summary"
diff --git a/src/com/android/settings/DreamBackend.java b/src/com/android/settings/DreamBackend.java
index 68a31a1..1a2f520 100644
--- a/src/com/android/settings/DreamBackend.java
+++ b/src/com/android/settings/DreamBackend.java
@@ -25,13 +25,24 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
import android.graphics.drawable.Drawable;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.provider.Settings;
+import android.service.dreams.Dream;
import android.service.dreams.IDreamManager;
+import android.util.AttributeSet;
import android.util.Log;
+import android.util.Xml;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -40,11 +51,6 @@ import java.util.List;
public class DreamBackend {
private static final String TAG = DreamSettings.class.getSimpleName() + ".Backend";
- // avoid breaking when the api changes.
- // FIXME: use the new xml file when available
- private static final String OLD_METADATA_NAME_CONFIG_ACTIVITY =
- "android.service.dreams.config_activity";
-
public static class DreamInfo {
CharSequence caption;
Drawable icon;
@@ -92,7 +98,7 @@ public class DreamBackend {
dreamInfo.icon = resolveInfo.loadIcon(pm);
dreamInfo.componentName = getDreamComponentName(resolveInfo);
dreamInfo.isActive = dreamInfo.componentName.equals(activeDream);
- dreamInfo.settingsComponentName = getSettingsComponentName(resolveInfo);
+ dreamInfo.settingsComponentName = getSettingsComponentName(pm, resolveInfo);
dreamInfos.add(dreamInfo);
}
Collections.sort(dreamInfos, mComparator);
@@ -204,12 +210,47 @@ public class DreamBackend {
return new ComponentName(resolveInfo.serviceInfo.packageName, resolveInfo.serviceInfo.name);
}
- private static ComponentName getSettingsComponentName(ResolveInfo resolveInfo) {
+ private static ComponentName getSettingsComponentName(PackageManager pm, ResolveInfo resolveInfo) {
if (resolveInfo == null
|| resolveInfo.serviceInfo == null
|| resolveInfo.serviceInfo.metaData == null)
return null;
- String cn = resolveInfo.serviceInfo.metaData.getString(OLD_METADATA_NAME_CONFIG_ACTIVITY);
+ String cn = null;
+ XmlResourceParser parser = null;
+ Exception caughtException = null;
+ try {
+ parser = resolveInfo.serviceInfo.loadXmlMetaData(pm, Dream.DREAM_META_DATA);
+ if (parser == null) {
+ Log.w(TAG, "No " + Dream.DREAM_META_DATA + " meta-data");
+ return null;
+ }
+ Resources res = pm.getResourcesForApplication(resolveInfo.serviceInfo.applicationInfo);
+ AttributeSet attrs = Xml.asAttributeSet(parser);
+ int type;
+ while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
+ && type != XmlPullParser.START_TAG) {
+ }
+ String nodeName = parser.getName();
+ if (!"dream".equals(nodeName)) {
+ Log.w(TAG, "Meta-data does not start with dream tag");
+ return null;
+ }
+ TypedArray sa = res.obtainAttributes(attrs, com.android.internal.R.styleable.Dream);
+ cn = sa.getString(com.android.internal.R.styleable.Dream_settingsActivity);
+ sa.recycle();
+ } catch (NameNotFoundException e) {
+ caughtException = e;
+ } catch (IOException e) {
+ caughtException = e;
+ } catch (XmlPullParserException e) {
+ caughtException = e;
+ } finally {
+ if (parser != null) parser.close();
+ }
+ if (caughtException != null) {
+ Log.w(TAG, "Error parsing : " + resolveInfo.serviceInfo.packageName, caughtException);
+ return null;
+ }
return cn == null ? null : ComponentName.unflattenFromString(cn);
}
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 1b63acb..2af212c 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -90,6 +90,7 @@ public class SecuritySettings extends SettingsPreferenceFragment
private static final String KEY_TOGGLE_INSTALL_APPLICATIONS = "toggle_install_applications";
private static final String KEY_TOGGLE_VERIFY_APPLICATIONS = "toggle_verify_applications";
private static final String KEY_POWER_INSTANTLY_LOCKS = "power_button_instantly_locks";
+ private static final String KEY_CREDENTIALS_MANAGER = "credentials_management";
private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive";
DevicePolicyManager mDPM;
@@ -112,6 +113,8 @@ public class SecuritySettings extends SettingsPreferenceFragment
private CheckBoxPreference mToggleVerifyApps;
private CheckBoxPreference mPowerButtonInstantlyLocks;
+ private boolean mIsPrimary;
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -164,7 +167,9 @@ public class SecuritySettings extends SettingsPreferenceFragment
DevicePolicyManager dpm =
(DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
- if (UserHandle.myUserId() == 0) {
+ mIsPrimary = UserHandle.myUserId() == UserHandle.USER_OWNER;
+
+ if (mIsPrimary) {
switch (dpm.getStorageEncryptionStatus()) {
case DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE:
// The device is currently encrypted.
@@ -216,17 +221,40 @@ public class SecuritySettings extends SettingsPreferenceFragment
}
}
- if (UserHandle.myUserId() > 0) {
- return root;
+ mUserSelectedWidget = root.findPreference(KEY_CHOOSE_LOCKSCREEN_STATUS_WIDGET);
+ if (mUserSelectedWidget != null) {
+ AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getActivity());
+ int appWidgetId = getStatusAppWidgetId();
+ if (appWidgetId == -1) {
+ mUserSelectedWidget.setSummary(getResources().getString(R.string.widget_default));
+ } else {
+ AppWidgetProviderInfo appWidget = appWidgetManager.getAppWidgetInfo(appWidgetId);
+ if (appWidget != null) {
+ mUserSelectedWidget.setSummary(appWidget.label);
+ }
+ }
+ }
+
+ mUserSelectedWidget = root.findPreference(KEY_CHOOSE_USER_SELECTED_LOCKSCREEN_WIDGET);
+ if (mUserSelectedWidget != null) {
+ AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getActivity());
+ int appWidgetId = getUserSelectedAppWidgetId();
+ if (appWidgetId == -1) {
+ mUserSelectedWidget.setSummary(getResources().getString(R.string.widget_none));
+ } else {
+ AppWidgetProviderInfo appWidget = appWidgetManager.getAppWidgetInfo(appWidgetId);
+ if (appWidget != null) {
+ mUserSelectedWidget.setSummary(appWidget.label);
+ }
+ }
}
- // Rest are for primary user...
// Append the rest of the settings
addPreferencesFromResource(R.xml.security_settings_misc);
// Do not display SIM lock for devices without an Icc card
TelephonyManager tm = TelephonyManager.getDefault();
- if (!tm.hasIccCard()) {
+ if (!mIsPrimary || !tm.hasIccCard()) {
root.removePreference(root.findPreference(KEY_SIM_LOCK));
} else {
// Disable SIM lock if sim card is missing or unknown
@@ -241,50 +269,28 @@ public class SecuritySettings extends SettingsPreferenceFragment
// Show password
mShowPassword = (CheckBoxPreference) root.findPreference(KEY_SHOW_PASSWORD);
- // Credential storage
- mResetCredentials = root.findPreference(KEY_RESET_CREDENTIALS);
+ // Credential storage, only for primary user
+ if (mIsPrimary) {
+ mResetCredentials = root.findPreference(KEY_RESET_CREDENTIALS);
+ } else {
+ removePreference(KEY_CREDENTIALS_MANAGER);
+ }
mToggleAppInstallation = (CheckBoxPreference) findPreference(
KEY_TOGGLE_INSTALL_APPLICATIONS);
mToggleAppInstallation.setChecked(isNonMarketAppsAllowed());
- // Package verification
- if (showVerifierSetting()) {
- mToggleVerifyApps = (CheckBoxPreference) findPreference(KEY_TOGGLE_VERIFY_APPLICATIONS);
+ // Package verification, only visible to primary user and if enabled
+ mToggleVerifyApps = (CheckBoxPreference) findPreference(KEY_TOGGLE_VERIFY_APPLICATIONS);
+ if (mIsPrimary && showVerifierSetting()) {
if (isVerifierInstalled()) {
mToggleVerifyApps.setChecked(isVerifyAppsEnabled());
} else {
mToggleVerifyApps.setChecked(false);
mToggleVerifyApps.setEnabled(false);
}
- }
-
- mUserSelectedWidget = root.findPreference(KEY_CHOOSE_LOCKSCREEN_STATUS_WIDGET);
- if (mUserSelectedWidget != null) {
- AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getActivity());
- int appWidgetId = getStatusAppWidgetId();
- if (appWidgetId == -1) {
- mUserSelectedWidget.setSummary(getResources().getString(R.string.widget_default));
- } else {
- AppWidgetProviderInfo appWidget = appWidgetManager.getAppWidgetInfo(appWidgetId);
- if (appWidget != null) {
- mUserSelectedWidget.setSummary(appWidget.label);
- }
- }
- }
-
- mUserSelectedWidget = root.findPreference(KEY_CHOOSE_USER_SELECTED_LOCKSCREEN_WIDGET);
- if (mUserSelectedWidget != null) {
- AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getActivity());
- int appWidgetId = getUserSelectedAppWidgetId();
- if (appWidgetId == -1) {
- mUserSelectedWidget.setSummary(getResources().getString(R.string.widget_none));
- } else {
- AppWidgetProviderInfo appWidget = appWidgetManager.getAppWidgetInfo(appWidgetId);
- if (appWidget != null) {
- mUserSelectedWidget.setSummary(appWidget.label);
- }
- }
+ } else if (mToggleVerifyApps != null) {
+ mToggleVerifyApps.setEnabled(false);
}
return root;