/* * 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.intentresolver; import static android.app.admin.DevicePolicyResources.Strings.Core.RESOLVER_WORK_PAUSED_TITLE; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.admin.DevicePolicyEventLogger; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.os.UserHandle; import android.stats.devicepolicy.nano.DevicePolicyEnums; import com.android.intentresolver.AbstractMultiProfilePagerAdapter.EmptyState; import com.android.intentresolver.AbstractMultiProfilePagerAdapter.EmptyStateProvider; import com.android.intentresolver.AbstractMultiProfilePagerAdapter.OnSwitchOnWorkSelectedListener; /** * Chooser/ResolverActivity empty state provider that returns empty state which is shown when * work profile is paused and we need to show a button to enable it. */ public class WorkProfilePausedEmptyStateProvider implements EmptyStateProvider { private final UserHandle mWorkProfileUserHandle; private final WorkProfileAvailabilityManager mWorkProfileAvailability; private final String mMetricsCategory; private final OnSwitchOnWorkSelectedListener mOnSwitchOnWorkSelectedListener; private final Context mContext; public WorkProfilePausedEmptyStateProvider(@NonNull Context context, @Nullable UserHandle workProfileUserHandle, @NonNull WorkProfileAvailabilityManager workProfileAvailability, @Nullable OnSwitchOnWorkSelectedListener onSwitchOnWorkSelectedListener, @NonNull String metricsCategory) { mContext = context; mWorkProfileUserHandle = workProfileUserHandle; mWorkProfileAvailability = workProfileAvailability; mMetricsCategory = metricsCategory; mOnSwitchOnWorkSelectedListener = onSwitchOnWorkSelectedListener; } @Nullable @Override public EmptyState getEmptyState(ResolverListAdapter resolverListAdapter) { if (!resolverListAdapter.getUserHandle().equals(mWorkProfileUserHandle) || !mWorkProfileAvailability.isQuietModeEnabled() || resolverListAdapter.getCount() == 0) { return null; } final String title = mContext.getSystemService(DevicePolicyManager.class) .getResources().getString(RESOLVER_WORK_PAUSED_TITLE, () -> mContext.getString(R.string.resolver_turn_on_work_apps)); return new WorkProfileOffEmptyState(title, (tab) -> { tab.showSpinner(); if (mOnSwitchOnWorkSelectedListener != null) { mOnSwitchOnWorkSelectedListener.onSwitchOnWorkSelected(); } mWorkProfileAvailability.requestQuietModeEnabled(false); }, mMetricsCategory); } public static class WorkProfileOffEmptyState implements EmptyState { private final String mTitle; private final ClickListener mOnClick; private final String mMetricsCategory; public WorkProfileOffEmptyState(String title, @NonNull ClickListener onClick, @NonNull String metricsCategory) { mTitle = title; mOnClick = onClick; mMetricsCategory = metricsCategory; } @Nullable @Override public String getTitle() { return mTitle; } @Nullable @Override public ClickListener getButtonClickListener() { return mOnClick; } @Override public void onEmptyStateShown() { DevicePolicyEventLogger .createEvent(DevicePolicyEnums.RESOLVER_EMPTY_STATE_WORK_APPS_DISABLED) .setStrings(mMetricsCategory) .write(); } } }