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

Commit 8573d27d authored by Ivan Podogov's avatar Ivan Podogov Committed by android-build-merger
Browse files

Merge "Add "Your work policy info" entry in Privacy settings" into qt-dev

am: 9a1c75c5

Change-Id: Ib61dae6c30e90500aaec381a6eb5f7f7a82bc610
parents 5d8cd009 9a1c75c5
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -414,4 +414,7 @@

    <!-- List containing the injected tile keys which are suppressed. -->
    <string-array name="config_suppress_injected_tile_keys" translatable="false"/>

    <!-- "Show work policy info" intent action. TODO(b/134391103): Replace with final SystemAPI intent when it's available. -->
    <string name="config_work_policy_info_intent_action" translatable="false"/>
</resources>
+6 −0
Original line number Diff line number Diff line
@@ -11326,4 +11326,10 @@
    <!-- Title for enable MMS notification channel.  [CHAR LIMIT=40] -->
    <string name="dual_cdma_sim_warning_notification_channel_title">SIM combination</string>
    <!-- Title of setting on privacy settings screen that will show work policy info. [CHAR LIMIT=NONE] -->
    <string name="work_policy_privacy_settings">Your work policy info</string>
    <!-- Summary for Enterprise Privacy settings, explaining what the user can expect to find under it [CHAR LIMIT=NONE]-->
    <string name="work_policy_privacy_settings_summary">Settings managed by your IT admin</string>
</resources>
+9 −1
Original line number Diff line number Diff line
@@ -29,6 +29,14 @@
        android:title="@string/summary_placeholder"
        settings:controller="com.android.settings.privacy.PermissionBarChartPreferenceController"/>

    <!-- Work Policy info -->
    <Preference
        android:key="work_policy_info"
        android:title="@string/work_policy_privacy_settings"
        android:summary="@string/work_policy_privacy_settings_summary"
        settings:allowDividerAbove="true"
        settings:controller="com.android.settings.privacy.WorkPolicyInfoPreferenceController"/>

    <!-- Accessibility usage -->
    <Preference
        android:key="privacy_accessibility_usage"
+13 −0
Original line number Diff line number Diff line
@@ -124,4 +124,17 @@ public interface EnterprisePrivacyFeatureProvider {
     * profile (if any).
     */
    int getNumberOfActiveDeviceAdminsForCurrentUserAndManagedProfile();

    /**
     * Returns {@code true} if it is possilbe to resolve an Intent to launch the "Your work policy
     * info" page provided by the active Device Owner or Profile Owner app if it exists, {@code
     * false} otherwise.
     */
    boolean hasWorkPolicyInfo();

    /**
     * Launches the Device Owner or Profile Owner's activity that displays the "Your work policy
     * info" page. Returns {@code true} if the activity has indeed been launched.
     */
    boolean showWorkPolicyInfo();
}
+90 −13
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.UserInfo;
import android.content.res.Resources;
import android.net.ConnectivityManager;
@@ -61,19 +62,7 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe

    @Override
    public boolean hasDeviceOwner() {
        if (!mPm.hasSystemFeature(PackageManager.FEATURE_DEVICE_ADMIN)) {
            return false;
        }
        return mDpm.getDeviceOwnerComponentOnAnyUser() != null;
    }

    private int getManagedProfileUserId() {
        for (final UserInfo userInfo : mUm.getProfiles(MY_USER_ID)) {
            if (userInfo.isManagedProfile()) {
                return userInfo.id;
            }
        }
        return UserHandle.USER_NULL;
        return getDeviceOwnerComponent() != null;
    }

    @Override
@@ -234,6 +223,94 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe
        return activeAdmins;
    }

    @Override
    public boolean hasWorkPolicyInfo() {
        return (getWorkPolicyInfoIntentDO() != null) || (getWorkPolicyInfoIntentPO() != null);
    }

    @Override
    public boolean showWorkPolicyInfo() {
        Intent intent = getWorkPolicyInfoIntentDO();
        if (intent != null) {
            mContext.startActivity(intent);
            return true;
        }

        intent = getWorkPolicyInfoIntentPO();
        final UserInfo userInfo = getManagedProfileUserInfo();
        if (intent != null && userInfo != null) {
            mContext.startActivityAsUser(intent, userInfo.getUserHandle());
            return true;
        }

        return false;
    }

    private ComponentName getDeviceOwnerComponent() {
        if (!mPm.hasSystemFeature(PackageManager.FEATURE_DEVICE_ADMIN)) {
            return null;
        }
        return mDpm.getDeviceOwnerComponentOnAnyUser();
    }

    private UserInfo getManagedProfileUserInfo() {
        for (final UserInfo userInfo : mUm.getProfiles(MY_USER_ID)) {
            if (userInfo.isManagedProfile()) {
                return userInfo;
            }
        }
        return null;
    }

    private int getManagedProfileUserId() {
        final UserInfo userInfo = getManagedProfileUserInfo();
        if (userInfo != null) {
            return userInfo.id;
        }
        return UserHandle.USER_NULL;
    }

    private Intent getWorkPolicyInfoIntentDO() {
        final ComponentName ownerComponent = getDeviceOwnerComponent();
        if (ownerComponent == null) {
            return null;
        }

        // Only search for the required action in the Device Owner's package
        final Intent intent =
                new Intent(mResources.getString(R.string.config_work_policy_info_intent_action))
                        .setPackage(ownerComponent.getPackageName());
        final List<ResolveInfo> activities = mPm.queryIntentActivities(intent, 0);
        if (activities.size() != 0) {
            return intent;
        }

        return null;
    }

    private Intent getWorkPolicyInfoIntentPO() {
        final int userId = getManagedProfileUserId();
        if (userId == UserHandle.USER_NULL) {
            return null;
        }

        final ComponentName ownerComponent = mDpm.getProfileOwnerAsUser(userId);
        if (ownerComponent == null) {
            return null;
        }

        // Only search for the required action in the Profile Owner's package
        final Intent intent =
                new Intent(mResources.getString(R.string.config_work_policy_info_intent_action))
                        .setPackage(ownerComponent.getPackageName());
        final List<ResolveInfo> activities = mPm.queryIntentActivitiesAsUser(intent, 0, userId);
        if (activities.size() != 0) {
            return intent;
        }

        return null;
    }

    protected static class EnterprisePrivacySpan extends ClickableSpan {
        private final Context mContext;

Loading