The dialog can be dismissed by either the framework automatically (i.e. when the screen is rotated) or when the subscriptions change. If both of these things happen while the class is not deleted, then dismiss() will be called twice and there will be a crash Bug: 184899699 Test: atest -c SettingsUnitTests Change-Id: Ibaef59696feb566664a424f65f806396f02497e8
97 lines
2.9 KiB
Java
97 lines
2.9 KiB
Java
/*
|
|
* Copyright (C) 2019 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.sim;
|
|
|
|
import android.content.Context;
|
|
import android.content.DialogInterface;
|
|
import android.os.Bundle;
|
|
import android.util.Log;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
|
import com.android.settings.network.SubscriptionsChangeListener;
|
|
|
|
/** Common functionality for showing a dialog in SimDialogActivity. */
|
|
public abstract class SimDialogFragment extends InstrumentedDialogFragment implements
|
|
SubscriptionsChangeListener.SubscriptionsChangeListenerClient {
|
|
private static final String TAG = "SimDialogFragment";
|
|
|
|
private static final String KEY_TITLE_ID = "title_id";
|
|
private static final String KEY_DIALOG_TYPE = "dialog_type";
|
|
|
|
private SubscriptionsChangeListener mChangeListener;
|
|
protected boolean mWasDismissed = false;
|
|
|
|
protected static Bundle initArguments(int dialogType, int titleResId) {
|
|
final Bundle args = new Bundle();
|
|
args.putInt(KEY_DIALOG_TYPE, dialogType);
|
|
args.putInt(KEY_TITLE_ID, titleResId);
|
|
return args;
|
|
}
|
|
|
|
public int getDialogType() {
|
|
return getArguments().getInt(KEY_DIALOG_TYPE);
|
|
}
|
|
|
|
public int getTitleResId() {
|
|
return getArguments().getInt(KEY_TITLE_ID);
|
|
}
|
|
|
|
@Override
|
|
public void onAttach(Context context) {
|
|
super.onAttach(context);
|
|
Log.d(TAG, "Dialog Attached.");
|
|
mWasDismissed = false;
|
|
mChangeListener = new SubscriptionsChangeListener(context, this);
|
|
}
|
|
|
|
@Override
|
|
public void onPause() {
|
|
super.onPause();
|
|
mChangeListener.stop();
|
|
}
|
|
|
|
@Override
|
|
public void onResume() {
|
|
super.onResume();
|
|
mChangeListener.start();
|
|
}
|
|
|
|
@Override
|
|
public void onDismiss(@NonNull DialogInterface dialog) {
|
|
Log.d(TAG, "Dialog Dismissed.");
|
|
mWasDismissed = true;
|
|
super.onDismiss(dialog);
|
|
final SimDialogActivity activity = (SimDialogActivity) getActivity();
|
|
if (activity != null && !activity.isFinishing()) {
|
|
activity.onFragmentDismissed(this);
|
|
}
|
|
}
|
|
|
|
public abstract void updateDialog();
|
|
|
|
@Override
|
|
public void onAirplaneModeChanged(boolean airplaneModeEnabled) {
|
|
}
|
|
|
|
@Override
|
|
public void onSubscriptionsChanged() {
|
|
updateDialog();
|
|
}
|
|
}
|