12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- package com.afollestad.materialdialogs;
- import android.app.Dialog;
- import android.content.Context;
- import android.content.DialogInterface;
- import android.os.Message;
- import android.view.View;
- import java.lang.reflect.Field;
- /**
- * @author Aidan Follestad (afollestad)
- */
- class DialogBase extends Dialog implements DialogInterface.OnShowListener {
- private OnShowListener mShowListener;
- protected DialogBase(Context context, int theme) {
- super(context, theme);
- }
- @Override
- public final void setOnShowListener(OnShowListener listener) {
- mShowListener = listener;
- }
- protected final void setOnShowListenerInternal() {
- super.setOnShowListener(this);
- }
- protected final void setViewInternal(View view) {
- setContentView(view);
- }
- @Override
- public void onShow(DialogInterface dialog) {
- if (mShowListener != null)
- mShowListener.onShow(dialog);
- }
- @Override
- protected void onStop() {
- super.onStop();
- // Prevent framework leak
- try {
- Class superCls = getClass().getSuperclass().getSuperclass();
- Field cancelMsg = superCls.getDeclaredField("mCancelMessage");
- scrubMessageField(cancelMsg);
- Field dismissMsg = superCls.getDeclaredField("mDismissMessage");
- scrubMessageField(dismissMsg);
- Field showMsg = superCls.getDeclaredField("mShowMessage");
- scrubMessageField(showMsg);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- private void scrubMessageField(Field field) throws Exception {
- field.setAccessible(true);
- Object val = field.get(this);
- if (val != null) {
- Message msg = (Message) val;
- msg.recycle();
- field.set(this, null);
- }
- }
- }
|