From 2ef0f2fc6d08a3e077e4425754c867e7cf3140c3 Mon Sep 17 00:00:00 2001 From: Adnan Date: Tue, 26 Aug 2014 18:31:33 -0700 Subject: DownloadProvider: Create and implement DialogDismissListener. - Better way to dismiss a host activity then explicitly calling getActivity() finish(). Change-Id: I121fb63d2d57c6c4b22abac2389d5c3d5ccad6e4 --- .../downloads/ui/DialogDismissListener.java | 21 ++++++++++++++ .../providers/downloads/ui/TrampolineActivity.java | 33 ++++++++++++++++++---- 2 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 ui/src/com/android/providers/downloads/ui/DialogDismissListener.java diff --git a/ui/src/com/android/providers/downloads/ui/DialogDismissListener.java b/ui/src/com/android/providers/downloads/ui/DialogDismissListener.java new file mode 100644 index 00000000..e55caa82 --- /dev/null +++ b/ui/src/com/android/providers/downloads/ui/DialogDismissListener.java @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2014 The CyanogenMod 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.providers.downloads.ui; + +interface DialogDismissListener { + public void onDialogDismiss(); +} diff --git a/ui/src/com/android/providers/downloads/ui/TrampolineActivity.java b/ui/src/com/android/providers/downloads/ui/TrampolineActivity.java index 8ada01b0..b4f2698e 100755 --- a/ui/src/com/android/providers/downloads/ui/TrampolineActivity.java +++ b/ui/src/com/android/providers/downloads/ui/TrampolineActivity.java @@ -41,7 +41,7 @@ import libcore.io.IoUtils; * Intercept all download clicks to provide special behavior. For example, * PackageInstaller really wants raw file paths. */ -public class TrampolineActivity extends Activity { +public class TrampolineActivity extends Activity implements DialogDismissListener { private static final String TAG_PAUSED = "paused"; private static final String TAG_FAILED = "failed"; @@ -125,7 +125,14 @@ public class TrampolineActivity extends Activity { sendBroadcast(intent); } + @Override + public void onDialogDismiss() { + finish(); + } + public static class PausedDialogFragment extends DialogFragment { + private DialogDismissListener mListener; + public static void show(FragmentManager fm, long id) { final PausedDialogFragment dialog = new PausedDialogFragment(); final Bundle args = new Bundle(); @@ -134,9 +141,16 @@ public class TrampolineActivity extends Activity { dialog.show(fm, TAG_PAUSED); } + @Override + public void onDetach() { + super.onDetach(); + mListener = null; + } + @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Context context = getActivity(); + mListener = (DialogDismissListener) getActivity(); final DownloadManager dm = (DownloadManager) context.getSystemService( Context.DOWNLOAD_SERVICE); @@ -165,13 +179,15 @@ public class TrampolineActivity extends Activity { @Override public void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); - if (getActivity() != null) { - getActivity().finish(); + if (mListener != null) { + mListener.onDialogDismiss(); } } } public static class FailedDialogFragment extends DialogFragment { + private DialogDismissListener mListener; + public static void show(FragmentManager fm, long id, int reason) { final FailedDialogFragment dialog = new FailedDialogFragment(); final Bundle args = new Bundle(); @@ -181,9 +197,16 @@ public class TrampolineActivity extends Activity { dialog.show(fm, TAG_FAILED); } + @Override + public void onDetach() { + super.onDetach(); + mListener = null; + } + @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Context context = getActivity(); + mListener = (DialogDismissListener) getActivity(); final DownloadManager dm = (DownloadManager) context.getSystemService( Context.DOWNLOAD_SERVICE); @@ -236,8 +259,8 @@ public class TrampolineActivity extends Activity { @Override public void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); - if (getActivity() != null) { - getActivity().finish(); + if (mListener != null) { + mListener.onDialogDismiss(); } } } -- cgit v1.2.3