DefaultAppPickerFragment.java revision a278962dbc545f69ca3712159d438f2e50dab0a5
1/* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.settings.applications.defaultapps; 18 19import android.app.Activity; 20import android.app.AlertDialog; 21import android.app.Dialog; 22import android.app.DialogFragment; 23import android.app.Fragment; 24import android.content.Context; 25import android.content.DialogInterface; 26import android.os.Bundle; 27import android.text.TextUtils; 28 29import com.android.internal.logging.nano.MetricsProto; 30import com.android.settings.R; 31import com.android.settings.applications.PackageManagerWrapper; 32import com.android.settings.applications.PackageManagerWrapperImpl; 33import com.android.settings.core.instrumentation.InstrumentedDialogFragment; 34import com.android.settings.widget.RadioButtonPickerFragment; 35import com.android.settings.widget.RadioButtonPreference; 36 37/** 38 * A generic app picker fragment that shows a list of app as radio button group. 39 */ 40public abstract class DefaultAppPickerFragment extends RadioButtonPickerFragment { 41 42 protected PackageManagerWrapper mPm; 43 44 @Override 45 public void onAttach(Context context) { 46 super.onAttach(context); 47 mPm = new PackageManagerWrapperImpl(context.getPackageManager()); 48 } 49 50 @Override 51 public void onRadioButtonClicked(RadioButtonPreference selected) { 52 final String selectedKey = selected.getKey(); 53 final String confirmationMessage = getConfirmationMessage(getCandidate(selectedKey)); 54 final Activity activity = getActivity(); 55 if (TextUtils.isEmpty(confirmationMessage)) { 56 super.onRadioButtonClicked(selected); 57 } else if (activity != null) { 58 final DialogFragment fragment = ConfirmationDialogFragment.newInstance( 59 this, selectedKey, confirmationMessage); 60 fragment.show(activity.getFragmentManager(), ConfirmationDialogFragment.TAG); 61 } 62 } 63 64 65 @Override 66 public void bindPreferenceExtra(RadioButtonPreference pref, 67 String key, CandidateInfo info, String defaultKey, String systemDefaultKey) { 68 if (!(info instanceof DefaultAppInfo)) { 69 return; 70 } 71 if (TextUtils.equals(systemDefaultKey, key)) { 72 pref.setSummary(R.string.system_app); 73 } else if (!TextUtils.isEmpty(((DefaultAppInfo) info).summary)) { 74 pref.setSummary(((DefaultAppInfo) info).summary); 75 } 76 } 77 78 protected String getConfirmationMessage(CandidateInfo info) { 79 return null; 80 } 81 82 public static class ConfirmationDialogFragment extends InstrumentedDialogFragment 83 implements DialogInterface.OnClickListener { 84 85 public static final String TAG = "DefaultAppConfirm"; 86 public static final String EXTRA_KEY = "extra_key"; 87 public static final String EXTRA_MESSAGE = "extra_message"; 88 89 @Override 90 public int getMetricsCategory() { 91 return MetricsProto.MetricsEvent.DEFAULT_APP_PICKER_CONFIRMATION_DIALOG; 92 } 93 94 public static ConfirmationDialogFragment newInstance(DefaultAppPickerFragment parent, 95 String key, String message) { 96 final ConfirmationDialogFragment fragment = new ConfirmationDialogFragment(); 97 final Bundle argument = new Bundle(); 98 argument.putString(EXTRA_KEY, key); 99 argument.putString(EXTRA_MESSAGE, message); 100 fragment.setArguments(argument); 101 fragment.setTargetFragment(parent, 0); 102 return fragment; 103 } 104 105 @Override 106 public Dialog onCreateDialog(Bundle savedInstanceState) { 107 final Bundle bundle = getArguments(); 108 final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) 109 .setMessage(bundle.getString(EXTRA_MESSAGE)) 110 .setPositiveButton(android.R.string.ok, this) 111 .setNegativeButton(android.R.string.cancel, null); 112 return builder.create(); 113 } 114 115 @Override 116 public void onClick(DialogInterface dialog, int which) { 117 final Fragment fragment = getTargetFragment(); 118 if (fragment instanceof DefaultAppPickerFragment) { 119 final Bundle bundle = getArguments(); 120 ((DefaultAppPickerFragment) fragment).onRadioButtonConfirmed( 121 bundle.getString(EXTRA_KEY)); 122 } 123 } 124 } 125} 126