package com.android.settings.fuelgauge; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.IntDef; import android.support.annotation.VisibleForTesting; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Fragment to show the dialog for uninstall or forcestop. This fragment uses function in * target fragment to handle the dialog button click. */ public class ButtonActionDialogFragment extends InstrumentedDialogFragment implements DialogInterface.OnClickListener { /** * Interface to handle the dialog click */ interface AppButtonsDialogListener { void handleDialogClick(int type); } @Retention(RetentionPolicy.SOURCE) @IntDef({ DialogType.DISABLE, DialogType.SPECIAL_DISABLE, DialogType.FORCE_STOP }) public @interface DialogType { int DISABLE = 0; int SPECIAL_DISABLE = 1; int FORCE_STOP = 2; } private static final String ARG_ID = "id"; @VisibleForTesting int mId; public static ButtonActionDialogFragment newInstance(@DialogType int id) { ButtonActionDialogFragment dialogFragment = new ButtonActionDialogFragment(); Bundle args = new Bundle(1); args.putInt(ARG_ID, id); dialogFragment.setArguments(args); return dialogFragment; } @Override public int getMetricsCategory() { //TODO(35810915): update the metrics label because for now this fragment will be shown // in two screens return MetricsProto.MetricsEvent.DIALOG_APP_INFO_ACTION; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Bundle bundle = getArguments(); mId = bundle.getInt(ARG_ID); Dialog dialog = createDialog(mId); if (dialog == null) { throw new IllegalArgumentException("unknown id " + mId); } return dialog; } @Override public void onClick(DialogInterface dialog, int which) { final AppButtonsDialogListener lsn = (AppButtonsDialogListener) getTargetFragment(); lsn.handleDialogClick(mId); } private AlertDialog createDialog(int id) { final Context context = getContext(); switch (id) { case DialogType.DISABLE: case DialogType.SPECIAL_DISABLE: return new AlertDialog.Builder(context) .setMessage(R.string.app_disable_dlg_text) .setPositiveButton(R.string.app_disable_dlg_positive, this) .setNegativeButton(R.string.dlg_cancel, null) .create(); case DialogType.FORCE_STOP: return new AlertDialog.Builder(context) .setTitle(R.string.force_stop_dlg_title) .setMessage(R.string.force_stop_dlg_text) .setPositiveButton(R.string.dlg_ok, this) .setNegativeButton(R.string.dlg_cancel, null) .create(); } return null; } }