All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.com.android.settingslib.enterprise.ManagedDeviceActionDisabledByAdminController Maven / Gradle / Ivy

/*
 * Copyright (C) 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settingslib.enterprise;

import static java.util.Objects.requireNonNull;

import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.UserHandle;
import android.os.UserManager;
import android.text.TextUtils;

import androidx.annotation.Nullable;

import com.android.settingslib.enterprise.ActionDisabledLearnMoreButtonLauncher.ResolveActivityChecker;


/**
 * An {@link ActionDisabledByAdminController} to be used with managed devices.
 */
final class ManagedDeviceActionDisabledByAdminController
        extends BaseActionDisabledByAdminController {

    interface ForegroundUserChecker {
        boolean isUserForeground(Context context, UserHandle userHandle);
    }

    public final static ForegroundUserChecker DEFAULT_FOREGROUND_USER_CHECKER =
            ManagedDeviceActionDisabledByAdminController::isUserForeground;

    /**
     * The {@link UserHandle} which is preferred for launching the web help page in
     * 

If not able to launch the web help page in this user, the current user will be used as * fallback instead. If the current user cannot open it either, the admin policies page will * be used instead. */ private final UserHandle mPreferredUserHandle; private final ForegroundUserChecker mForegroundUserChecker; private final ResolveActivityChecker mResolveActivityChecker; /** * Constructs a {@link ManagedDeviceActionDisabledByAdminController} * @param preferredUserHandle - user on which to launch the help web page, if necessary */ ManagedDeviceActionDisabledByAdminController( DeviceAdminStringProvider stringProvider, UserHandle preferredUserHandle, ForegroundUserChecker foregroundUserChecker, ResolveActivityChecker resolveActivityChecker) { super(stringProvider); mPreferredUserHandle = requireNonNull(preferredUserHandle); mForegroundUserChecker = requireNonNull(foregroundUserChecker); mResolveActivityChecker = requireNonNull(resolveActivityChecker); } @Override public void setupLearnMoreButton(Context context) { assertInitialized(); String url = mStringProvider.getLearnMoreHelpPageUrl(); if (!TextUtils.isEmpty(url) && canLaunchHelpPageInPreferredOrCurrentUser(context, url, mPreferredUserHandle)) { setupLearnMoreButtonToLaunchHelpPage(context, url, mPreferredUserHandle); } else { mLauncher.setupLearnMoreButtonToShowAdminPolicies(context, mEnforcementAdminUserId, mEnforcedAdmin); } } private boolean canLaunchHelpPageInPreferredOrCurrentUser( Context context, String url, UserHandle preferredUserHandle) { PackageManager packageManager = context.getPackageManager(); if (mLauncher.canLaunchHelpPage( packageManager, url, preferredUserHandle, mResolveActivityChecker) && mForegroundUserChecker.isUserForeground(context, preferredUserHandle)) { return true; } return mLauncher.canLaunchHelpPage( packageManager, url, context.getUser(), mResolveActivityChecker); } /** * Sets up the "Learn more" button to launch the web help page in the {@code * preferredUserHandle} user. If not possible to launch it there, it sets up the button to * launch it in the current user instead. */ private void setupLearnMoreButtonToLaunchHelpPage( Context context, String url, UserHandle preferredUserHandle) { PackageManager packageManager = context.getPackageManager(); if (mLauncher.canLaunchHelpPage( packageManager, url, preferredUserHandle, mResolveActivityChecker) && mForegroundUserChecker.isUserForeground(context, preferredUserHandle)) { mLauncher.setupLearnMoreButtonToLaunchHelpPage(context, url, preferredUserHandle); } if (mLauncher.canLaunchHelpPage( packageManager, url, context.getUser(), mResolveActivityChecker)) { mLauncher.setupLearnMoreButtonToLaunchHelpPage(context, url, context.getUser()); } } private static boolean isUserForeground(Context context, UserHandle userHandle) { return context.createContextAsUser(userHandle, /* flags= */ 0) .getSystemService(UserManager.class).isUserForeground(); } @Override public String getAdminSupportTitle(@Nullable String restriction) { if (restriction == null) { return mStringProvider.getDefaultDisabledByPolicyTitle(); } switch (restriction) { case UserManager.DISALLOW_ADJUST_VOLUME: return mStringProvider.getDisallowAdjustVolumeTitle(); case UserManager.DISALLOW_OUTGOING_CALLS: return mStringProvider.getDisallowOutgoingCallsTitle(); case UserManager.DISALLOW_SMS: return mStringProvider.getDisallowSmsTitle(); case DevicePolicyManager.POLICY_DISABLE_CAMERA: return mStringProvider.getDisableCameraTitle(); case DevicePolicyManager.POLICY_DISABLE_SCREEN_CAPTURE: return mStringProvider.getDisableScreenCaptureTitle(); case DevicePolicyManager.POLICY_SUSPEND_PACKAGES: return mStringProvider.getSuspendPackagesTitle(); default: return mStringProvider.getDefaultDisabledByPolicyTitle(); } } @Override public CharSequence getAdminSupportContentString(Context context, CharSequence supportMessage) { return supportMessage != null ? supportMessage : mStringProvider.getDefaultDisabledByPolicyContent(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy