unplugged-system/packages/modules/Permission/service/java/com/android/safetycenter/SafetySources.java

115 lines
4.2 KiB
Java
Raw Normal View History

/*
* Copyright (C) 2022 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.safetycenter;
import static android.os.Build.VERSION_CODES.TIRAMISU;
import android.safetycenter.SafetySourceData;
import android.safetycenter.config.SafetySource;
import android.util.Log;
import androidx.annotation.RequiresApi;
/**
* A helper class to facilitate working with {@link SafetySource} objects.
*
* @hide
*/
@RequiresApi(TIRAMISU)
public final class SafetySources {
private static final String TAG = "SafetySources";
/**
* Returns whether a {@link SafetySource} is external, i.e. if {@link SafetySourceData} can be
* provided for it.
*/
public static boolean isExternal(SafetySource safetySource) {
int safetySourceType = safetySource.getType();
switch (safetySourceType) {
case SafetySource.SAFETY_SOURCE_TYPE_STATIC:
return false;
case SafetySource.SAFETY_SOURCE_TYPE_DYNAMIC:
case SafetySource.SAFETY_SOURCE_TYPE_ISSUE_ONLY:
return true;
}
Log.w(TAG, "Unexpected safety source type: " + safetySourceType);
return false;
}
/** Returns whether a {@link SafetySource} supports managed profiles. */
public static boolean supportsManagedProfiles(SafetySource safetySource) {
int safetySourceProfile = safetySource.getProfile();
switch (safetySourceProfile) {
case SafetySource.PROFILE_PRIMARY:
case SafetySource.PROFILE_NONE:
return false;
case SafetySource.PROFILE_ALL:
return true;
}
Log.w(TAG, "Unexpected safety source profile: " + safetySourceProfile);
return false;
}
/** Returns whether a {@link SafetySource} default entry should be hidden in the UI. */
static boolean isDefaultEntryHidden(SafetySource safetySource) {
int safetySourceType = safetySource.getType();
switch (safetySourceType) {
case SafetySource.SAFETY_SOURCE_TYPE_STATIC:
case SafetySource.SAFETY_SOURCE_TYPE_ISSUE_ONLY:
return false;
case SafetySource.SAFETY_SOURCE_TYPE_DYNAMIC:
return safetySource.getInitialDisplayState()
== SafetySource.INITIAL_DISPLAY_STATE_HIDDEN;
}
Log.w(TAG, "Unexpected safety source type: " + safetySourceType);
return false;
}
/** Returns whether a {@link SafetySource} default entry should be disabled in the UI. */
static boolean isDefaultEntryDisabled(SafetySource safetySource) {
int safetySourceType = safetySource.getType();
switch (safetySourceType) {
case SafetySource.SAFETY_SOURCE_TYPE_STATIC:
case SafetySource.SAFETY_SOURCE_TYPE_ISSUE_ONLY:
return false;
case SafetySource.SAFETY_SOURCE_TYPE_DYNAMIC:
return safetySource.getInitialDisplayState()
== SafetySource.INITIAL_DISPLAY_STATE_DISABLED;
}
Log.w(TAG, "Unexpected safety source type: " + safetySourceType);
return false;
}
/**
* Returns whether a {@link SafetySource} can be logged, without requiring a check of source
* type first.
*/
public static boolean isLoggable(SafetySource safetySource) {
// Only external sources can have logging allowed values. Non-external sources cannot have
// their loggability configured. Unfortunately isLoggingAllowed throws if called on a
// non-external source.
if (isExternal(safetySource)) {
return safetySource.isLoggingAllowed();
} else {
return true;
}
}
private SafetySources() {}
}