blob: c6fd45e3488f573fd76e1384e6e697921c6bc3ad [file] [log] [blame]
/*
* Copyright 2017 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 androidx.work.impl.utils;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import androidx.work.Logger;
/**
* Helper class for common {@link PackageManager} functions
*/
public class PackageManagerHelper {
private static final String TAG = "PackageManagerHelper";
private PackageManagerHelper() {
}
/**
* Uses {@link PackageManager} to enable/disable a manifest-defined component
*
* @param context {@link Context}
* @param klazz The class of component
* @param enabled {@code true} if component should be enabled
*/
public static void setComponentEnabled(
@NonNull Context context,
@NonNull Class klazz,
boolean enabled) {
try {
PackageManager packageManager = context.getPackageManager();
ComponentName componentName = new ComponentName(context, klazz.getName());
packageManager.setComponentEnabledSetting(componentName,
enabled
? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
: PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
Logger.debug(TAG,
String.format("%s %s", klazz.getName(), (enabled ? "enabled" : "disabled")));
} catch (Exception exception) {
Logger.debug(TAG, String.format("%s could not be %s", klazz.getName(),
(enabled ? "enabled" : "disabled")), exception);
}
}
/**
* Convenience method for {@link #isComponentExplicitlyEnabled(Context, String)}
*/
public static boolean isComponentExplicitlyEnabled(Context context, Class klazz) {
return isComponentExplicitlyEnabled(context, klazz.getName());
}
/**
* Checks if a manifest-defined component is explicitly enabled
*
* @param context {@link Context}
* @param className {@link Class#getName()} name of component
* @return {@code true} if component is explicitly enabled
*/
public static boolean isComponentExplicitlyEnabled(Context context, String className) {
PackageManager packageManager = context.getPackageManager();
ComponentName componentName = new ComponentName(context, className);
int state = packageManager.getComponentEnabledSetting(componentName);
return state == PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
}
}