/* * Copyright (C) 2018 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.permissioncontroller.role.ui; import android.app.Application; import android.content.Context; import android.content.pm.ApplicationInfo; import android.os.UserHandle; import android.util.Log; import android.util.Pair; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import androidx.lifecycle.Transformations; import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; import com.android.role.controller.model.Role; import java.util.List; /** * {@link ViewModel} for a default app. */ public class DefaultAppViewModel extends AndroidViewModel { private static final String LOG_TAG = DefaultAppViewModel.class.getSimpleName(); @NonNull private final Role mRole; @NonNull private final UserHandle mUser; @NonNull private final LiveData>> mRoleLiveData; @NonNull private final ManageRoleHolderStateLiveData mManageRoleHolderStateLiveData = new ManageRoleHolderStateLiveData(); public DefaultAppViewModel(@NonNull Role role, @NonNull UserHandle user, @NonNull Application application) { super(application); mRole = role; mUser = user; mRoleLiveData = Transformations.map(new RoleLiveData(mRole, mUser, application), new RoleSortFunction(application)); } @NonNull public LiveData>> getRoleLiveData() { return mRoleLiveData; } @NonNull public ManageRoleHolderStateLiveData getManageRoleHolderStateLiveData() { return mManageRoleHolderStateLiveData; } /** * Set an application as the default app. * * @param packageName the package name of the application */ public void setDefaultApp(@NonNull String packageName) { if (mManageRoleHolderStateLiveData.getValue() != ManageRoleHolderStateLiveData.STATE_IDLE) { Log.i(LOG_TAG, "Trying to set default app while another request is on-going"); return; } mManageRoleHolderStateLiveData.setRoleHolderAsUser(mRole.getName(), packageName, true, 0, mUser, getApplication()); } /** * Set "None" as the default app. */ public void setNoneDefaultApp() { Context context = getApplication(); mRole.onNoneHolderSelectedAsUser(mUser, context); if (mManageRoleHolderStateLiveData.getValue() != ManageRoleHolderStateLiveData.STATE_IDLE) { Log.i(LOG_TAG, "Trying to set default app while another request is on-going"); return; } mManageRoleHolderStateLiveData.clearRoleHoldersAsUser(mRole.getName(), 0, mUser, context); } /** * {@link ViewModelProvider.Factory} for {@link DefaultAppViewModel}. */ public static class Factory implements ViewModelProvider.Factory { @NonNull private Role mRole; @NonNull private UserHandle mUser; @NonNull private Application mApplication; public Factory(@NonNull Role role, @NonNull UserHandle user, @NonNull Application application) { mRole = role; mUser = user; mApplication = application; } @NonNull @Override public T create(@NonNull Class modelClass) { //noinspection unchecked return (T) new DefaultAppViewModel(mRole, mUser, mApplication); } } }