Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 301fe80f authored by Fan Zhang's avatar Fan Zhang
Browse files

Add location to security settings.

Bug: 32437756
Test: RunSettingsRoboTests
Change-Id: I999669963801684eb2399f5e642159970727b3c4
parent 9895344b
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -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">
+50 −8
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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);
@@ -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;
@@ -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)) {
@@ -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);
@@ -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;
@@ -1053,7 +1096,6 @@ public class SecuritySettings extends SettingsPreferenceFragment
            if (root != null) {
                root.removeAll();
            }
            root = null;

            final int resid = getResIdForLockUnlockSubScreen(getActivity(),
                    new LockPatternUtils(getContext()),
+2 −0
Original line number Diff line number Diff line
@@ -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",
+11 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
 */
package com.android.settings.dashboard;

import android.app.Activity;
import android.content.Context;
import android.support.v7.preference.Preference;

@@ -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.
     */
+39 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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