/* * Copyright 2019 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.car.settings.applications; import static android.provider.DeviceConfig.NAMESPACE_APP_HIBERNATION; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; import android.content.pm.UserInfo; import android.provider.DeviceConfig; import android.telecom.DefaultDialerManager; import android.text.TextUtils; import android.util.ArraySet; import com.android.car.settings.profiles.ProfileHelper; import com.android.internal.telephony.SmsApplication; import java.util.List; import java.util.Set; /** Utility functions for use in applications settings. */ public class ApplicationsUtils { /** Whether or not app hibernation is enabled on the device **/ public static final String PROPERTY_APP_HIBERNATION_ENABLED = "app_hibernation_enabled"; private ApplicationsUtils() { } /** * Returns {@code true} if the package should always remain enabled. */ // TODO: investigate making this behavior configurable via a feature factory with the current // contents as the default. public static boolean isKeepEnabledPackage(Context context, String packageName) { // Find current default phone/sms app. We should keep them enabled. Set keepEnabledPackages = new ArraySet<>(); String defaultDialer = DefaultDialerManager.getDefaultDialerApplication(context); if (!TextUtils.isEmpty(defaultDialer)) { keepEnabledPackages.add(defaultDialer); } ComponentName defaultSms = SmsApplication.getDefaultSmsApplication( context, /* updateIfNeeded= */ true); if (defaultSms != null) { keepEnabledPackages.add(defaultSms.getPackageName()); } return keepEnabledPackages.contains(packageName); } /** * Returns {@code true} if the given {@code packageName} is device owner or profile owner of at * least one user. */ public static boolean isProfileOrDeviceOwner(String packageName, DevicePolicyManager dpm, ProfileHelper profileHelper) { if (dpm.isDeviceOwnerAppOnAnyUser(packageName)) { return true; } List userInfos = profileHelper.getAllProfiles(); for (int i = 0; i < userInfos.size(); i++) { ComponentName cn = dpm.getProfileOwnerAsUser(userInfos.get(i).id); if (cn != null && cn.getPackageName().equals(packageName)) { return true; } } return false; } /** * Returns {@code true} if the hibernation feature is enabled, as configured through {@link * DeviceConfig}, which can be overridden remotely with a flag or through adb. */ public static boolean isHibernationEnabled() { return DeviceConfig.getBoolean( NAMESPACE_APP_HIBERNATION, PROPERTY_APP_HIBERNATION_ENABLED, true); } }