/* * Copyright (C) 2024 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.bluetooth; import android.app.Dialog; import android.app.settings.SettingsEnums; import android.bluetooth.BluetoothDevice; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import com.android.settings.R; import com.android.settings.core.SubSettingLauncher; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settingslib.bluetooth.LocalBluetoothManager; /** * A dialogFragment used by {@link BluetoothKeyMissingDialog} to create a dialog for the bluetooth * device. */ public class BluetoothKeyMissingDialogFragment extends InstrumentedDialogFragment implements OnClickListener { private static final String TAG = "BTKeyMissingDialogFrg"; private static final String KEY_CACHED_DEVICE_ADDRESS = "cached_device"; private BluetoothDevice mBluetoothDevice; /** Creates a new instant of the fragment. */ public static BluetoothKeyMissingDialogFragment newInstance(BluetoothDevice device) { Bundle args = new Bundle(1); args.putString(KEY_CACHED_DEVICE_ADDRESS, device.getAddress()); BluetoothKeyMissingDialogFragment fragment = new BluetoothKeyMissingDialogFragment(); fragment.setArguments(args); return fragment; } @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { String deviceAddress = getArguments().getString(KEY_CACHED_DEVICE_ADDRESS); LocalBluetoothManager manager = Utils.getLocalBtManager(getContext()); mBluetoothDevice = manager.getBluetoothAdapter().getRemoteDevice(deviceAddress); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); View view = getActivity().getLayoutInflater().inflate(R.layout.bluetooth_key_missing, null); TextView keyMissingTitle = view.findViewById(R.id.bluetooth_key_missing_title); keyMissingTitle.setText( getString(R.string.bluetooth_key_missing_title, mBluetoothDevice.getName())); builder.setView(view); builder.setPositiveButton(getString(R.string.bluetooth_key_missing_device_settings), this); builder.setNegativeButton(getString(R.string.bluetooth_key_missing_close), this); AlertDialog dialog = builder.create(); dialog.setCanceledOnTouchOutside(false); return dialog; } @Override public void onDestroy() { super.onDestroy(); if (!getActivity().isChangingConfigurations() && !getActivity().isFinishing()) { getActivity().finish(); } } @Override public void onClick(DialogInterface dialog, int which) { if (which == DialogInterface.BUTTON_POSITIVE) { Log.i(TAG, "Positive button clicked for " + mBluetoothDevice.getAnonymizedAddress()); Bundle args = new Bundle(); args.putString( BluetoothDeviceDetailsFragment.KEY_DEVICE_ADDRESS, mBluetoothDevice.getAddress()); new SubSettingLauncher(requireContext()) .setDestination(BluetoothDeviceDetailsFragment.class.getName()) .setArguments(args) .setTitleRes(R.string.device_details_title) .setSourceMetricsCategory(getMetricsCategory()) .launch(); } else if (which == DialogInterface.BUTTON_NEGATIVE) { Log.i(TAG, "Negative button clicked for " + mBluetoothDevice.getAnonymizedAddress()); } if (!getActivity().isFinishing()) { getActivity().finish(); } } @Override public int getMetricsCategory() { return SettingsEnums.BLUETOOTH_KEY_MISSING_DIALOG_FRAGMENT; } }