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

Commit 9ed50758 authored by Ben Lin's avatar Ben Lin Committed by Android (Google) Code Review
Browse files

Merge "Use BroadcastReceiver to notify root changes." into arc-apps

parents 02d3627d be1e0799
Loading
Loading
Loading
Loading
+12 −11
Original line number Diff line number Diff line
@@ -17,11 +17,12 @@
package com.android.documentsui;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.support.v4.content.LocalBroadcastManager;

import com.android.documentsui.AbstractActionHandler.CommonAddons;
import com.android.documentsui.base.DocumentInfo;
@@ -39,8 +40,8 @@ import java.util.Collection;
 */
final class RootsMonitor<T extends Activity & CommonAddons> {

    private final ContentResolver mResolver;
    private final ContentObserver mObserver;
    private final LocalBroadcastManager mManager;
    private final BroadcastReceiver mReceiver;

    RootsMonitor(
            final T activity,
@@ -49,11 +50,11 @@ final class RootsMonitor<T extends Activity & CommonAddons> {
            final DocumentsAccess docs,
            final State state,
            final SearchViewManager searchMgr) {
        mResolver = activity.getContentResolver();
        mManager = LocalBroadcastManager.getInstance(activity);

        mObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
        mReceiver = new BroadcastReceiver() {
            @Override
            public void onChange(boolean selfChange) {
            public void onReceive(Context context, Intent intent) {
                new HandleRootsChangedTask<T>(
                        activity,
                        actions,
@@ -66,11 +67,11 @@ final class RootsMonitor<T extends Activity & CommonAddons> {
    }

    void start() {
        mResolver.registerContentObserver(RootsAccess.NOTIFICATION_URI, false, mObserver);
        mManager.registerReceiver(mReceiver, new IntentFilter(RootsAccess.BROADCAST_ACTION));
    }

    void stop() {
        mResolver.unregisterContentObserver(mObserver);
        mManager.unregisterReceiver(mReceiver);
    }

    private static class HandleRootsChangedTask<T extends Activity & CommonAddons>
+1 −2
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.documentsui.roots;
import static com.android.documentsui.base.Shared.DEBUG;
import static com.android.documentsui.base.Shared.VERBOSE;

import android.net.Uri;
import android.util.Log;

import com.android.documentsui.base.MimeTypes;
@@ -36,7 +35,7 @@ import java.util.List;
 */
public interface RootsAccess {

    Uri NOTIFICATION_URI = Uri.parse("content://com.android.documentsui.roots/");
    String BROADCAST_ACTION = "com.android.documentsui.action.ROOT_CHANGED";

    /**
     * Return the requested {@link RootInfo}, but only loading the roots for the
+2 −2
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.os.Handler;
import android.os.SystemClock;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Root;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;

import com.android.documentsui.DocumentsApplication;
@@ -411,7 +412,6 @@ public class RootsCache implements RootsAccess {

            mTaskRoots.put(mRecentsRoot.authority, mRecentsRoot);

            final ContentResolver resolver = mContext.getContentResolver();
            final PackageManager pm = mContext.getPackageManager();

            // Pick up provider with action string
@@ -434,7 +434,7 @@ public class RootsCache implements RootsAccess {
                mStoppedAuthorities = mTaskStoppedAuthorities;
            }
            mFirstLoad.countDown();
            resolver.notifyChange(NOTIFICATION_URI, null, false);
            LocalBroadcastManager.getInstance(mContext).sendBroadcast(new Intent(BROADCAST_ACTION));
            return null;
        }

+13 −4
Original line number Diff line number Diff line
@@ -17,7 +17,11 @@
package com.android.documentsui.roots;

import android.content.AsyncTaskLoader;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.content.LocalBroadcastManager;

import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.State;
@@ -25,7 +29,12 @@ import com.android.documentsui.base.State;
import java.util.Collection;

public class RootsLoader extends AsyncTaskLoader<Collection<RootInfo>> {
    private final ForceLoadContentObserver mObserver = new ForceLoadContentObserver();
    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            onContentChanged();
        }
    };

    private final RootsCache mRoots;
    private final State mState;
@@ -37,8 +46,8 @@ public class RootsLoader extends AsyncTaskLoader<Collection<RootInfo>> {
        mRoots = roots;
        mState = state;

        context.getContentResolver().registerContentObserver(
                RootsAccess.NOTIFICATION_URI, false, mObserver);
        LocalBroadcastManager.getInstance(context).registerReceiver(
                mReceiver, new IntentFilter(RootsAccess.BROADCAST_ACTION));
    }

    @Override
@@ -83,6 +92,6 @@ public class RootsLoader extends AsyncTaskLoader<Collection<RootInfo>> {

        mResult = null;

        getContext().getContentResolver().unregisterContentObserver(mObserver);
        LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(mReceiver);
    }
}