Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 78b13703 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Grab Activity reference before leaving fragment.

When creating a new directory, we spawn an AsyncTask and finish the
fragment.  This change keeps an Activity reference to report the
result back to.

Bug: 11137561
Change-Id: Icfccc5e50e8f53a50dced589e1564d64457e0ed0
parent a6af40cd
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ public class CreateDirectoryFragment extends DialogFragment {
                final DocumentsActivity activity = (DocumentsActivity) getActivity();
                final DocumentInfo cwd = activity.getCurrentDirectory();

                new CreateDirectoryTask(displayName).executeOnExecutor(
                new CreateDirectoryTask(activity, cwd, displayName).executeOnExecutor(
                        ProviderExecutor.forAuthority(cwd.authority));
            }
        });
@@ -83,25 +83,26 @@ public class CreateDirectoryFragment extends DialogFragment {
    }

    private class CreateDirectoryTask extends AsyncTask<Void, Void, DocumentInfo> {
        private final DocumentsActivity mActivity;
        private final DocumentInfo mCwd;
        private final String mDisplayName;

        public CreateDirectoryTask(String displayName) {
        public CreateDirectoryTask(
                DocumentsActivity activity, DocumentInfo cwd, String displayName) {
            mActivity = activity;
            mCwd = cwd;
            mDisplayName = displayName;
        }

        @Override
        protected DocumentInfo doInBackground(Void... params) {
            final DocumentsActivity activity = (DocumentsActivity) getActivity();
            final ContentResolver resolver = activity.getContentResolver();

            final DocumentInfo cwd = activity.getCurrentDirectory();

            final ContentResolver resolver = mActivity.getContentResolver();
            ContentProviderClient client = null;
            try {
                client = DocumentsApplication.acquireUnstableProviderOrThrow(
                        resolver, cwd.derivedUri.getAuthority());
                        resolver, mCwd.derivedUri.getAuthority());
                final Uri childUri = DocumentsContract.createDocument(
                        client, cwd.derivedUri, Document.MIME_TYPE_DIR, mDisplayName);
                        client, mCwd.derivedUri, Document.MIME_TYPE_DIR, mDisplayName);
                return DocumentInfo.fromUri(resolver, childUri);
            } catch (Exception e) {
                Log.w(TAG, "Failed to create directory", e);
@@ -113,12 +114,11 @@ public class CreateDirectoryFragment extends DialogFragment {

        @Override
        protected void onPostExecute(DocumentInfo result) {
            final DocumentsActivity activity = (DocumentsActivity) getActivity();
            if (result != null) {
                // Navigate into newly created child
                activity.onDocumentPicked(result);
                mActivity.onDocumentPicked(result);
            } else {
                Toast.makeText(activity, R.string.create_error, Toast.LENGTH_SHORT).show();
                Toast.makeText(mActivity, R.string.create_error, Toast.LENGTH_SHORT).show();
            }
        }
    }