blob: a2cf529baffc88363c8ac92f3d1c8947f0b0f3fc [file] [log] [blame]
/*
* Copyright (C) 2023 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.devicelockcontroller.activities;
import androidx.lifecycle.MediatorLiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import com.android.devicelockcontroller.R;
import com.android.devicelockcontroller.storage.SetupParametersClient;
import com.android.devicelockcontroller.util.LogUtil;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.MoreExecutors;
import java.util.Arrays;
import java.util.List;
/**
* This class provides resources and data used to display the polices the device provider enforces
* on this device.
*/
public final class DevicePoliciesViewModel extends ViewModel {
private static final int HEADER_DRAWABLE_ID = R.drawable.ic_info_24px;
private static final int HEADER_TEXT_ID = R.string.setup_info_title_text;
private static final int FOOTER_TEXT_ID = R.string.footer_notice;
private static final DevicePolicyGroup CONTROL_POLICY_GROUP =
new DevicePolicyGroup.Builder()
.setTitleTextId(R.string.control_section_title)
.addDevicePolicy(R.drawable.ic_lock_outline_24px,
R.string.control_lock_device_text)
.addDevicePolicy(R.drawable.ic_file_download_24px,
R.string.control_download_text)
.addDevicePolicy(R.drawable.ic_bug_report_24px,
R.string.control_disable_debug_text)
.build();
private static final DevicePolicyGroup LOCK_POLICY_GROUP =
new DevicePolicyGroup.Builder()
.setTitleTextId(R.string.locked_section_title)
.addDevicePolicy(R.drawable.ic_local_hospital_24px,
R.string.locked_emergency_text)
.addDevicePolicy(R.drawable.ic_phone_callback_outlined_24px,
R.string.locked_phone_usage_text)
.addDevicePolicy(R.drawable.ic_settings_applications_24px,
R.string.locked_settings_usage_text)
.addDevicePolicy(R.drawable.ic_settings_backup_restore_24px,
R.string.locked_backup_and_restore_text)
.build();
private static final DevicePolicyGroup EXPOSURE_POLICY_GROUP =
new DevicePolicyGroup.Builder()
.setTitleTextId(R.string.exposure_section_title)
.addDevicePolicy(R.drawable.ic_delete_24px,
R.string.exposure_install_text)
.addDevicePolicy(R.drawable.ic_lock_open_24px,
R.string.exposure_lock_unlock_text)
.addDevicePolicy(R.drawable.ic_block_24px,
R.string.exposure_disable_dlc_text)
.build();
private static final List<DevicePolicyGroup> DEVICE_POLICY_GROUPS = Arrays.asList(
CONTROL_POLICY_GROUP, LOCK_POLICY_GROUP, EXPOSURE_POLICY_GROUP);
public static final String TAG = "DevicePoliciesViewModel";
final MutableLiveData<String> mProviderNameLiveData;
final MutableLiveData<Integer> mHeaderDrawableIdLiveData;
final MutableLiveData<Integer> mHeaderTextIdLiveData;
final MediatorLiveData<List<DevicePolicyGroup>> mDevicePolicyGroupListLiveData;
final MutableLiveData<Integer> mFooterTextIdLiveData;
public DevicePoliciesViewModel() {
mProviderNameLiveData = new MutableLiveData<>();
Futures.addCallback(SetupParametersClient.getInstance().getKioskAppProviderName(),
new FutureCallback<>() {
@Override
public void onSuccess(String result) {
mProviderNameLiveData.postValue(result);
}
@Override
public void onFailure(Throwable t) {
LogUtil.e(TAG, "Failed to get Device Provider name!", t);
}
}, MoreExecutors.directExecutor());
mHeaderDrawableIdLiveData = new MutableLiveData<>(HEADER_DRAWABLE_ID);
mHeaderTextIdLiveData = new MutableLiveData<>(HEADER_TEXT_ID);
mDevicePolicyGroupListLiveData = new MediatorLiveData<>();
mDevicePolicyGroupListLiveData.addSource(mProviderNameLiveData,
unused -> mDevicePolicyGroupListLiveData.setValue(DEVICE_POLICY_GROUPS));
mFooterTextIdLiveData = new MutableLiveData<>(FOOTER_TEXT_ID);
}
}