| /* |
| * 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.settings.privatespace; |
| |
| import static com.android.settings.privatespace.PrivateSpaceMaintainer.ErrorDeletingPrivateSpace.DELETE_PS_ERROR_INTERNAL; |
| import static com.android.settings.privatespace.PrivateSpaceMaintainer.ErrorDeletingPrivateSpace.DELETE_PS_ERROR_NONE; |
| import static com.android.settings.privatespace.PrivateSpaceMaintainer.ErrorDeletingPrivateSpace.DELETE_PS_ERROR_NO_PRIVATE_SPACE; |
| |
| import android.content.Context; |
| import android.text.TextUtils; |
| import android.util.Log; |
| import android.widget.Toast; |
| |
| import androidx.preference.Preference; |
| |
| import com.android.internal.annotations.VisibleForTesting; |
| import com.android.settings.R; |
| import com.android.settings.core.BasePreferenceController; |
| |
| /** Controller to delete the private space from the PS Settings page */ |
| public class DeletePrivateSpaceController extends BasePreferenceController { |
| private static final String TAG = "DeletePrivateSpaceController"; |
| private final PrivateSpaceMaintainer mPrivateSpaceMaintainer; |
| |
| static class Injector { |
| PrivateSpaceMaintainer injectPrivateSpaceMaintainer(Context context) { |
| return PrivateSpaceMaintainer.getInstance(context); |
| } |
| } |
| |
| public DeletePrivateSpaceController(Context context, String preferenceKey) { |
| this(context, preferenceKey, new Injector()); |
| } |
| |
| DeletePrivateSpaceController(Context context, String preferenceKey, Injector injector) { |
| super(context, preferenceKey); |
| mPrivateSpaceMaintainer = injector.injectPrivateSpaceMaintainer(context); |
| } |
| |
| @Override |
| public int getAvailabilityStatus() { |
| return android.os.Flags.allowPrivateProfile() ? AVAILABLE : UNSUPPORTED_ON_DEVICE; |
| } |
| |
| @Override |
| public boolean handlePreferenceTreeClick(Preference preference) { |
| if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) { |
| return false; |
| } |
| |
| PrivateSpaceMaintainer.ErrorDeletingPrivateSpace error = |
| mPrivateSpaceMaintainer.deletePrivateSpace(); |
| if (error == DELETE_PS_ERROR_NONE) { |
| showSuccessfulDeletionToast(); |
| } else if (error == DELETE_PS_ERROR_INTERNAL) { |
| showDeletionInternalErrorToast(); |
| } else if (error == DELETE_PS_ERROR_NO_PRIVATE_SPACE) { |
| // Ideally this should never happen as PS Settings is not available when there's no |
| // Private Profile. |
| Log.e(TAG, "Unexpected attempt to delete non-existent PS"); |
| } |
| return super.handlePreferenceTreeClick(preference); |
| } |
| |
| /** Shows a toast saying that the private space was deleted */ |
| @VisibleForTesting |
| public void showSuccessfulDeletionToast() { |
| Toast.makeText(mContext, R.string.private_space_deleted, Toast.LENGTH_SHORT).show(); |
| } |
| |
| /** Shows a toast saying that the private space could not be deleted */ |
| @VisibleForTesting |
| public void showDeletionInternalErrorToast() { |
| Toast.makeText(mContext, R.string.private_space_delete_failed, Toast.LENGTH_SHORT).show(); |
| } |
| } |