/* * Copyright 2014, 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.managedprovisioning.preprovisioning; import android.annotation.Nullable; import android.app.AlertDialog; import android.content.ComponentName; import android.content.DialogInterface; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.android.managedprovisioning.R; import com.android.managedprovisioning.common.MdmPackageInfo; import com.android.managedprovisioning.common.SettingsFacade; import com.android.managedprovisioning.common.SimpleDialog; import com.google.android.setupcompat.util.SystemBarHelper; /** * Displays information about an existing managed profile and asks the user if it should be deleted. * *
Expects parent component to implement {@link SimpleDialog.SimpleDialogListener} for * user-response handling. */ public class DeleteManagedProfileDialog extends SimpleDialog { private static final String KEY_USER_PROFILE_CALLBACK_ID = "user_profile_callback_id"; private static final String KEY_MDM_PACKAGE_NAME = "mdm_package_name"; private static final String KEY_PROFILE_OWNER_DOMAIN = "profile_owner_domain"; private final SettingsFacade mSettingsFacade = new SettingsFacade(); /** * @param managedProfileUserId user-id for the managed profile * @param mdmPackageName package name of the MDM application for the current managed profile, * or null if the managed profile has no profile owner associated. * @param profileOwnerDomain domain name of the organization which owns the managed profile, or * null if not known * @return initialized dialog */ public static DeleteManagedProfileDialog newInstance( int managedProfileUserId, @Nullable ComponentName mdmPackageName, @Nullable String profileOwnerDomain) { // TODO: this is a bit hacky; tidy up if time permits, e.g. by creating a CustomDialog class Bundle args = new SimpleDialog.Builder() .setTitle(R.string.delete_profile_title) .setPositiveButtonMessage(R.string.delete_profile) .setNegativeButtonMessage(R.string.cancel_delete_profile) .setCancelable(false) .build() .getArguments(); args.putInt(KEY_USER_PROFILE_CALLBACK_ID, managedProfileUserId); // The device could be in a inconsistent state where it has a managed profile but no // associated profile owner package, for example after an unexpected reboot in the middle // of provisioning. if (mdmPackageName != null) { args.putString(KEY_MDM_PACKAGE_NAME, mdmPackageName.getPackageName()); } args.putString(KEY_PROFILE_OWNER_DOMAIN, profileOwnerDomain); DeleteManagedProfileDialog dialog = new DeleteManagedProfileDialog(); dialog.setArguments(args); return dialog; } @Override public AlertDialog onCreateDialog(Bundle savedInstanceState) { // TODO: this is a bit hacky; tidy up if time permits, e.g. by creating a CustomDialog class AlertDialog dialog = super.onCreateDialog(savedInstanceState); dialog.setView(createContentView()); if (!mSettingsFacade.isUserSetupCompleted(getActivity())) { SystemBarHelper.hideSystemBars(dialog); } return dialog; } private View createContentView() { View view = getActivity().getLayoutInflater().inflate( R.layout.delete_managed_profile_dialog, (ViewGroup) getActivity().findViewById(android.R.id.content), false); String mdmPackageName = getArguments().getString(KEY_MDM_PACKAGE_NAME); String appLabel; Drawable appIcon; MdmPackageInfo mdmPackageInfo = null; if (mdmPackageName != null) { mdmPackageInfo = MdmPackageInfo.createFromPackageName(getActivity(), mdmPackageName); } if (mdmPackageInfo != null) { appLabel = mdmPackageInfo.appLabel; appIcon = mdmPackageInfo.packageIcon; } else { appLabel = getResources().getString(android.R.string.unknownName); appIcon = getActivity().getPackageManager().getDefaultActivityIcon(); } ImageView imageView = view.findViewById(R.id.device_manager_icon_view); imageView.setImageDrawable(appIcon); imageView.setContentDescription( getResources().getString(R.string.mdm_icon_label, appLabel)); TextView deviceManagerName = view.findViewById(R.id.device_manager_name); deviceManagerName.setText(appLabel); return view; } /** * @return User id with which the dialog was instantiated */ public int getUserId() { return getArguments().getInt(KEY_USER_PROFILE_CALLBACK_ID); } @Override public void onCancel(DialogInterface dialog) { dialog.dismiss(); ((SimpleDialog.SimpleDialogListener) getActivity()).onNegativeButtonClick( DeleteManagedProfileDialog.this); } }