Loading AndroidManifest.xml +13 −0 Original line number Diff line number Diff line Loading @@ -3159,6 +3159,19 @@ android:value="true" /> </activity-alias> <activity-alias android:name="LocationDashboardAlias" android:targetActivity="Settings$LocationSettingsActivity"> <intent-filter> <action android:name="com.android.settings.action.SETTINGS" /> </intent-filter> <meta-data android:name="com.android.settings.category" android:value="com.android.settings.category.ia.security" /> <meta-data android:name="com.android.settings.FRAGMENT_CLASS" android:value="com.android.settings.location.LocationSettings" /> <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true" /> </activity-alias> <activity android:name=".Settings$SystemDashboardActivity" android:label="@string/header_category_system" android:icon="@drawable/ic_settings_about"> Loading src/com/android/settings/SecuritySettings.java +50 −8 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ package com.android.settings; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.app.FragmentManager; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; Loading @@ -35,7 +34,6 @@ import android.os.Bundle; import android.os.PersistableBundle; import android.os.UserHandle; import android.os.UserManager; import android.os.storage.StorageManager; import android.provider.SearchIndexableResource; import android.provider.Settings; import android.security.KeyStore; Loading @@ -52,11 +50,14 @@ import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.internal.widget.LockPatternUtils; import com.android.settings.TrustAgentUtils.TrustAgentComponentInfo; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.dashboard.DashboardFeatureProvider; import com.android.settings.fingerprint.FingerprintSettings; import com.android.settings.overlay.FeatureFactory; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Index; import com.android.settings.search.Indexable; Loading @@ -64,6 +65,9 @@ import com.android.settings.search.SearchIndexableRaw; import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedPreference; import com.android.settingslib.RestrictedSwitchPreference; import com.android.settingslib.drawer.CategoryKey; import com.android.settingslib.drawer.DashboardCategory; import com.android.settingslib.drawer.Tile; import java.util.ArrayList; import java.util.List; Loading @@ -79,6 +83,7 @@ public class SecuritySettings extends SettingsPreferenceFragment GearPreference.OnGearClickListener { private static final String TAG = "SecuritySettings"; private static final String TRUST_AGENT_CLICK_INTENT = "trust_agent_click_intent"; private static final Intent TRUST_AGENT_INTENT = new Intent(TrustAgentService.SERVICE_INTERFACE); Loading Loading @@ -125,6 +130,7 @@ public class SecuritySettings extends SettingsPreferenceFragment private static final int MY_USER_ID = UserHandle.myUserId(); private DashboardFeatureProvider mDashboardFeatureProvider; private DevicePolicyManager mDPM; private SubscriptionManager mSubscriptionManager; private UserManager mUm; Loading Loading @@ -162,17 +168,22 @@ public class SecuritySettings extends SettingsPreferenceFragment public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mSubscriptionManager = SubscriptionManager.from(getActivity()); final Activity activity = getActivity(); mLockPatternUtils = new LockPatternUtils(getActivity()); mSubscriptionManager = SubscriptionManager.from(activity); mManagedPasswordProvider = ManagedLockPasswordProvider.get(getActivity(), MY_USER_ID); mLockPatternUtils = new LockPatternUtils(activity); mManagedPasswordProvider = ManagedLockPasswordProvider.get(activity, MY_USER_ID); mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); mUm = UserManager.get(getActivity()); mUm = UserManager.get(activity); mChooseLockSettingsHelper = new ChooseLockSettingsHelper(activity); mChooseLockSettingsHelper = new ChooseLockSettingsHelper(getActivity()); mDashboardFeatureProvider = FeatureFactory.getFactory(activity) .getDashboardFeatureProvider(activity); if (savedInstanceState != null && savedInstanceState.containsKey(TRUST_AGENT_CLICK_INTENT)) { Loading Loading @@ -399,6 +410,13 @@ public class SecuritySettings extends SettingsPreferenceFragment Index.getInstance(getActivity()) .updateFromClassNameResource(SecuritySettings.class.getName(), true, true); final List<Preference> tilePrefs = getDynamicTilesForSecurity(); if (tilePrefs != null && !tilePrefs.isEmpty()) { for (Preference preference : tilePrefs) { root.addPreference(preference); } } for (int i = 0; i < SWITCH_PREFERENCE_KEYS.length; i++) { final Preference pref = findPreference(SWITCH_PREFERENCE_KEYS[i]); if (pref != null) pref.setOnPreferenceChangeListener(this); Loading Loading @@ -745,6 +763,31 @@ public class SecuritySettings extends SettingsPreferenceFragment SET_OR_CHANGE_LOCK_METHOD_REQUEST_PROFILE, extras); } private List<Preference> getDynamicTilesForSecurity() { if (!mDashboardFeatureProvider.isEnabled()) { return null; } final DashboardCategory category = mDashboardFeatureProvider.getTilesForCategory(CategoryKey.CATEGORY_SECURITY); if (category == null) { Log.d(TAG, "NO dashboard tiles for " + TAG); return null; } final List<Tile> tiles = category.tiles; if (tiles == null) { Log.d(TAG, "tile list is empty, skipping category " + category.title); return null; } final List<Preference> preferences = new ArrayList<>(); for (Tile tile : tiles) { final Preference pref = new Preference(getPrefContext()); mDashboardFeatureProvider .bindPreferenceToTile(getActivity(), pref, tile, null /* key */); preferences.add(pref); } return preferences; } @Override public boolean onPreferenceChange(Preference preference, Object value) { boolean result = true; Loading Loading @@ -1053,7 +1096,6 @@ public class SecuritySettings extends SettingsPreferenceFragment if (root != null) { root.removeAll(); } root = null; final int resid = getResIdForLockUnlockSubScreen(getActivity(), new LockPatternUtils(getContext()), Loading src/com/android/settings/SettingsActivity.java +2 −0 Original line number Diff line number Diff line Loading @@ -289,6 +289,8 @@ public class SettingsActivity extends SettingsDrawerActivity // Home page > Network & Internet "com.android.settings.Settings.WifiDashboardAlias", "com.android.settings.Settings.DataUsageDashboardAlias", // Home page > Security "com.android.settings.Settings.LocationDashboardAlias", // Home page > System "com.android.settings.Settings.LanguageAndInputDashboardAlias", "com.android.settings.Settings.DateTimeDashboardAlias", Loading src/com/android/settings/dashboard/DashboardFeatureProvider.java +11 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ */ package com.android.settings.dashboard; import android.app.Activity; import android.content.Context; import android.support.v7.preference.Preference; Loading Loading @@ -55,6 +56,16 @@ public interface DashboardFeatureProvider { */ String getDashboardKeyForTile(Tile tile); /** * Binds preference to data provided by tile. * * @param activity If tile contains intent to launch, it will be launched from this activity * @param pref The preference to bind data * @param tile The binding data * @param key They key for preference. If null, we will generate one from tile data */ void bindPreferenceToTile(Activity activity, Preference pref, Tile tile, String key); /** * Returns a {@link ProgressiveDisclosureMixin} for specified fragment. */ Loading src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +39 −0 Original line number Diff line number Diff line Loading @@ -16,10 +16,15 @@ package com.android.settings.dashboard; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.preference.Preference; import android.text.TextUtils; import com.android.settings.SettingsActivity; import com.android.settingslib.drawer.CategoryManager; import com.android.settingslib.drawer.DashboardCategory; import com.android.settingslib.drawer.Tile; Loading Loading @@ -73,6 +78,40 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { return sb.toString(); } @Override public void bindPreferenceToTile(Activity activity, Preference pref, Tile tile, String key) { pref.setTitle(tile.title); if (!TextUtils.isEmpty(key)) { pref.setKey(key); } else { pref.setKey(getDashboardKeyForTile(tile)); } pref.setSummary(tile.summary); if (tile.icon != null) { pref.setIcon(tile.icon.loadDrawable(activity)); } final Bundle metadata = tile.metaData; String clsName = null; if (metadata != null) { clsName = metadata.getString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS); } if (!TextUtils.isEmpty(clsName)) { pref.setFragment(clsName); } else if (tile.intent != null) { final Intent intent = new Intent(tile.intent); pref.setOnPreferenceClickListener(preference -> { activity.startActivityForResult(intent, 0); return true; }); } // Use negated priority for order, because tile priority is based on intent-filter // (larger value has higher priority). However pref order defines smaller value has // higher priority. if (tile.priority != 0) { pref.setOrder(-tile.priority); } } @Override public ProgressiveDisclosureMixin getProgressiveDisclosureMixin(Context context, DashboardFragment fragment) { Loading Loading
AndroidManifest.xml +13 −0 Original line number Diff line number Diff line Loading @@ -3159,6 +3159,19 @@ android:value="true" /> </activity-alias> <activity-alias android:name="LocationDashboardAlias" android:targetActivity="Settings$LocationSettingsActivity"> <intent-filter> <action android:name="com.android.settings.action.SETTINGS" /> </intent-filter> <meta-data android:name="com.android.settings.category" android:value="com.android.settings.category.ia.security" /> <meta-data android:name="com.android.settings.FRAGMENT_CLASS" android:value="com.android.settings.location.LocationSettings" /> <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true" /> </activity-alias> <activity android:name=".Settings$SystemDashboardActivity" android:label="@string/header_category_system" android:icon="@drawable/ic_settings_about"> Loading
src/com/android/settings/SecuritySettings.java +50 −8 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ package com.android.settings; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.app.FragmentManager; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; Loading @@ -35,7 +34,6 @@ import android.os.Bundle; import android.os.PersistableBundle; import android.os.UserHandle; import android.os.UserManager; import android.os.storage.StorageManager; import android.provider.SearchIndexableResource; import android.provider.Settings; import android.security.KeyStore; Loading @@ -52,11 +50,14 @@ import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.internal.widget.LockPatternUtils; import com.android.settings.TrustAgentUtils.TrustAgentComponentInfo; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.dashboard.DashboardFeatureProvider; import com.android.settings.fingerprint.FingerprintSettings; import com.android.settings.overlay.FeatureFactory; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Index; import com.android.settings.search.Indexable; Loading @@ -64,6 +65,9 @@ import com.android.settings.search.SearchIndexableRaw; import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedPreference; import com.android.settingslib.RestrictedSwitchPreference; import com.android.settingslib.drawer.CategoryKey; import com.android.settingslib.drawer.DashboardCategory; import com.android.settingslib.drawer.Tile; import java.util.ArrayList; import java.util.List; Loading @@ -79,6 +83,7 @@ public class SecuritySettings extends SettingsPreferenceFragment GearPreference.OnGearClickListener { private static final String TAG = "SecuritySettings"; private static final String TRUST_AGENT_CLICK_INTENT = "trust_agent_click_intent"; private static final Intent TRUST_AGENT_INTENT = new Intent(TrustAgentService.SERVICE_INTERFACE); Loading Loading @@ -125,6 +130,7 @@ public class SecuritySettings extends SettingsPreferenceFragment private static final int MY_USER_ID = UserHandle.myUserId(); private DashboardFeatureProvider mDashboardFeatureProvider; private DevicePolicyManager mDPM; private SubscriptionManager mSubscriptionManager; private UserManager mUm; Loading Loading @@ -162,17 +168,22 @@ public class SecuritySettings extends SettingsPreferenceFragment public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mSubscriptionManager = SubscriptionManager.from(getActivity()); final Activity activity = getActivity(); mLockPatternUtils = new LockPatternUtils(getActivity()); mSubscriptionManager = SubscriptionManager.from(activity); mManagedPasswordProvider = ManagedLockPasswordProvider.get(getActivity(), MY_USER_ID); mLockPatternUtils = new LockPatternUtils(activity); mManagedPasswordProvider = ManagedLockPasswordProvider.get(activity, MY_USER_ID); mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); mUm = UserManager.get(getActivity()); mUm = UserManager.get(activity); mChooseLockSettingsHelper = new ChooseLockSettingsHelper(activity); mChooseLockSettingsHelper = new ChooseLockSettingsHelper(getActivity()); mDashboardFeatureProvider = FeatureFactory.getFactory(activity) .getDashboardFeatureProvider(activity); if (savedInstanceState != null && savedInstanceState.containsKey(TRUST_AGENT_CLICK_INTENT)) { Loading Loading @@ -399,6 +410,13 @@ public class SecuritySettings extends SettingsPreferenceFragment Index.getInstance(getActivity()) .updateFromClassNameResource(SecuritySettings.class.getName(), true, true); final List<Preference> tilePrefs = getDynamicTilesForSecurity(); if (tilePrefs != null && !tilePrefs.isEmpty()) { for (Preference preference : tilePrefs) { root.addPreference(preference); } } for (int i = 0; i < SWITCH_PREFERENCE_KEYS.length; i++) { final Preference pref = findPreference(SWITCH_PREFERENCE_KEYS[i]); if (pref != null) pref.setOnPreferenceChangeListener(this); Loading Loading @@ -745,6 +763,31 @@ public class SecuritySettings extends SettingsPreferenceFragment SET_OR_CHANGE_LOCK_METHOD_REQUEST_PROFILE, extras); } private List<Preference> getDynamicTilesForSecurity() { if (!mDashboardFeatureProvider.isEnabled()) { return null; } final DashboardCategory category = mDashboardFeatureProvider.getTilesForCategory(CategoryKey.CATEGORY_SECURITY); if (category == null) { Log.d(TAG, "NO dashboard tiles for " + TAG); return null; } final List<Tile> tiles = category.tiles; if (tiles == null) { Log.d(TAG, "tile list is empty, skipping category " + category.title); return null; } final List<Preference> preferences = new ArrayList<>(); for (Tile tile : tiles) { final Preference pref = new Preference(getPrefContext()); mDashboardFeatureProvider .bindPreferenceToTile(getActivity(), pref, tile, null /* key */); preferences.add(pref); } return preferences; } @Override public boolean onPreferenceChange(Preference preference, Object value) { boolean result = true; Loading Loading @@ -1053,7 +1096,6 @@ public class SecuritySettings extends SettingsPreferenceFragment if (root != null) { root.removeAll(); } root = null; final int resid = getResIdForLockUnlockSubScreen(getActivity(), new LockPatternUtils(getContext()), Loading
src/com/android/settings/SettingsActivity.java +2 −0 Original line number Diff line number Diff line Loading @@ -289,6 +289,8 @@ public class SettingsActivity extends SettingsDrawerActivity // Home page > Network & Internet "com.android.settings.Settings.WifiDashboardAlias", "com.android.settings.Settings.DataUsageDashboardAlias", // Home page > Security "com.android.settings.Settings.LocationDashboardAlias", // Home page > System "com.android.settings.Settings.LanguageAndInputDashboardAlias", "com.android.settings.Settings.DateTimeDashboardAlias", Loading
src/com/android/settings/dashboard/DashboardFeatureProvider.java +11 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ */ package com.android.settings.dashboard; import android.app.Activity; import android.content.Context; import android.support.v7.preference.Preference; Loading Loading @@ -55,6 +56,16 @@ public interface DashboardFeatureProvider { */ String getDashboardKeyForTile(Tile tile); /** * Binds preference to data provided by tile. * * @param activity If tile contains intent to launch, it will be launched from this activity * @param pref The preference to bind data * @param tile The binding data * @param key They key for preference. If null, we will generate one from tile data */ void bindPreferenceToTile(Activity activity, Preference pref, Tile tile, String key); /** * Returns a {@link ProgressiveDisclosureMixin} for specified fragment. */ Loading
src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +39 −0 Original line number Diff line number Diff line Loading @@ -16,10 +16,15 @@ package com.android.settings.dashboard; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.preference.Preference; import android.text.TextUtils; import com.android.settings.SettingsActivity; import com.android.settingslib.drawer.CategoryManager; import com.android.settingslib.drawer.DashboardCategory; import com.android.settingslib.drawer.Tile; Loading Loading @@ -73,6 +78,40 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { return sb.toString(); } @Override public void bindPreferenceToTile(Activity activity, Preference pref, Tile tile, String key) { pref.setTitle(tile.title); if (!TextUtils.isEmpty(key)) { pref.setKey(key); } else { pref.setKey(getDashboardKeyForTile(tile)); } pref.setSummary(tile.summary); if (tile.icon != null) { pref.setIcon(tile.icon.loadDrawable(activity)); } final Bundle metadata = tile.metaData; String clsName = null; if (metadata != null) { clsName = metadata.getString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS); } if (!TextUtils.isEmpty(clsName)) { pref.setFragment(clsName); } else if (tile.intent != null) { final Intent intent = new Intent(tile.intent); pref.setOnPreferenceClickListener(preference -> { activity.startActivityForResult(intent, 0); return true; }); } // Use negated priority for order, because tile priority is based on intent-filter // (larger value has higher priority). However pref order defines smaller value has // higher priority. if (tile.priority != 0) { pref.setOrder(-tile.priority); } } @Override public ProgressiveDisclosureMixin getProgressiveDisclosureMixin(Context context, DashboardFragment fragment) { Loading