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

Commit f0e0ce60 authored by Brandon Maxwell's avatar Brandon Maxwell
Browse files

Using FilteredNumCompat for unblock

+ This CL updates the FilteredNumberAsyncQueryHandler#unblock methods
to use the FilteredNumberCompat class to properly choose between the
original Dialer blocking implementation and new blocking.

Bug=26664600

Change-Id: I528604eeafa4f7fa131cb1898d57a87708ba58b5
parent 60fb1dc7
Loading
Loading
Loading
Loading
+9 −14
Original line number Diff line number Diff line
@@ -115,14 +115,6 @@ public class FilteredNumberAsyncQueryHandler extends AsyncQueryHandler {
        }
    }

    private static Uri getContentUri(Integer id) {
        Uri uri = FilteredNumber.CONTENT_URI;
        if (id != null) {
            uri = ContentUris.withAppendedId(uri, id);
        }
        return uri;
    }

    public final void incrementFilteredCount(Integer id) {
        // No concept of counts with new filtering
        if (FilteredNumberCompat.useNewFiltering()) {
@@ -228,22 +220,25 @@ public class FilteredNumberAsyncQueryHandler extends AsyncQueryHandler {
    /**
     * Unblocks the number with the given id.
     *
     * @param listener The {@link OnUnblockNumberListener} called after the number is unblocked.
     * @param listener (optional) The {@link OnUnblockNumberListener} called after the number is
     * unblocked.
     * @param id The id of the number to unblock.
     */
    public void unblock(final OnUnblockNumberListener listener, Integer id) {
    public void unblock(@Nullable final OnUnblockNumberListener listener, Integer id) {
        if (id == null) {
            throw new IllegalArgumentException("Null id passed into unblock");
        }
        unblock(listener, getContentUri(id));
        unblock(listener, FilteredNumberCompat.getContentUri(id));
    }

    /**
     * Removes row from database.
     * @param listener (optional) The {@link OnUnblockNumberListener} called after the number is
     * unblocked.
     * @param uri The uri of row to remove, from
     * {@link FilteredNumberAsyncQueryHandler#blockNumber}.
     */
    public void unblock(final OnUnblockNumberListener listener, final Uri uri) {
    public void unblock(@Nullable final OnUnblockNumberListener listener, final Uri uri) {
        startQuery(NO_TOKEN, new Listener() {
            @Override
            public void onQueryComplete(int token, Object cookie, Cursor cursor) {
@@ -256,7 +251,7 @@ public class FilteredNumberAsyncQueryHandler extends AsyncQueryHandler {
                cursor.moveToFirst();
                final ContentValues values = new ContentValues();
                DatabaseUtils.cursorRowToContentValues(cursor, values);
                values.remove(FilteredNumberColumns._ID);
                values.remove(FilteredNumberCompat.getIdColumnName());

                startDelete(NO_TOKEN, new Listener() {
                    @Override
+80 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.dialer.database;

import android.content.ContentUris;
import android.content.ContentValues;
import android.net.Uri;
import android.provider.BlockedNumberContract;
@@ -31,6 +32,7 @@ import com.android.dialer.compat.FilteredNumberCompat;
import com.android.dialer.database.FilteredNumberAsyncQueryHandler.OnBlockNumberListener;
import com.android.dialer.database.FilteredNumberAsyncQueryHandler.OnCheckBlockedListener;
import com.android.dialer.database.FilteredNumberAsyncQueryHandler.OnHasBlockedNumbersListener;
import com.android.dialer.database.FilteredNumberAsyncQueryHandler.OnUnblockNumberListener;
import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns;
import com.android.dialer.database.FilteredNumberContract.FilteredNumberSources;
import com.android.dialer.database.FilteredNumberContract.FilteredNumberTypes;
@@ -51,6 +53,8 @@ public class FilteredNumberAsyncQueryHandlerTest extends InstrumentationTestCase
            Uri.withAppendedPath(FilteredNumberContract.AUTHORITY_URI, "filtered_numbers_table");
    private static final Uri BLOCKED_NUMBER_URI = CompatUtils.isNCompatible() ? BLOCKED_NUMBER_URI_N
            : BLOCKED_NUMBER_URI_M;
    private static final Uri BLOCKED_NUMBER_URI_WITH_ID =
            ContentUris.withAppendedId(BLOCKED_NUMBER_URI, ID);
    private static final Uri EXPECTED_URI = Uri.fromParts("android", "google", "dialer");

    private final MockContentResolver mContentResolver = new MockContentResolver();
@@ -226,6 +230,60 @@ public class FilteredNumberAsyncQueryHandlerTest extends InstrumentationTestCase
        mContentProvider.verify();
    }

    public void testUnblockNumber_Disabled() throws Throwable {
        if (!CompatUtils.isNCompatible()) {
            return;
        }
        FilteredNumberCompat.setIsEnabledForTest(false);
        final MockContentResolver resolver = new MockContentResolver();
        MockContentProvider disabledProvider = new MockContentProvider();
        resolver.addProvider(FilteredNumberContract.AUTHORITY, disabledProvider);

        Uri uriWithId = ContentUris.withAppendedId(BLOCKED_NUMBER_URI_M, ID);
        disabledProvider.expectQuery(uriWithId)
                .withProjection(null)
                .withDefaultProjection(FilteredNumberCompat.getIdColumnName())
                .withSelection(null, null)
                .withSortOrder(null)
                .returnRow(ID);
        disabledProvider.expectDelete(uriWithId).returnRowsAffected(1);
        final UnblockNumberListener listener = new UnblockNumberListener();
        runTestOnUiThread(new Runnable() {
            @Override
            public void run() {
                new FilteredNumberAsyncQueryHandler(resolver).unblock(listener, ID);
            }
        });
        assertNotNull(listener.waitForCallback());
        disabledProvider.verify();
    }

    public void testUnblockNumber_NullId() {
        try {
            new FilteredNumberAsyncQueryHandler(mContentResolver).unblock(null, (Integer) null);
            fail();
        } catch (IllegalArgumentException e) {}
    }

    public void testUnblockNumber() throws Throwable {
        mContentProvider.expectQuery(BLOCKED_NUMBER_URI_WITH_ID)
                .withProjection(null)
                .withDefaultProjection(FilteredNumberCompat.getIdColumnName())
                .withSelection(null, null)
                .withSortOrder(null)
                .returnRow(ID);
        mContentProvider.expectDelete(BLOCKED_NUMBER_URI_WITH_ID).returnRowsAffected(1);
        final UnblockNumberListener listener = new UnblockNumberListener();
        runTestOnUiThread(new Runnable() {
            @Override
            public void run() {
                new FilteredNumberAsyncQueryHandler(mContentResolver).unblock(listener, ID);
            }
        });
        assertNotNull(listener.waitForCallback());
        mContentProvider.verify();
    }

    private Query newIsBlockedNumberExpectedQuery() {
        if (CompatUtils.isNCompatible()) {
            return newIsBlockedNumberExpectedQueryN();
@@ -353,4 +411,26 @@ public class FilteredNumberAsyncQueryHandlerTest extends InstrumentationTestCase
            return uri;
        }
    }

    private class UnblockNumberListener implements OnUnblockNumberListener {
        public final CountDownLatch onUnblockCompleteCalled;
        public Integer result;

        public UnblockNumberListener() {
            onUnblockCompleteCalled = new CountDownLatch(1);
        }

        @Override
        public void onUnblockComplete(int rows, ContentValues values) {
            result = rows;
            onUnblockCompleteCalled.countDown();
        }

        public Integer waitForCallback() throws InterruptedException {
            if (!onUnblockCompleteCalled.await(5000, TimeUnit.MILLISECONDS)) {
                throw new IllegalStateException("Waiting on callback timed out.");
            }
            return result;
        }
    }
}