diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..1fab3bc
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,17 @@
+android_app {
+    name: "BlockedNumberProvider",
+
+    // Only compile source java files in this apk.
+    srcs: ["src/**/*.java"],
+    static_libs: [
+        "android-common",
+        "guava",
+    ],
+    jacoco: {
+        include_filter: ["com.android.providers.blockednumber.*"],
+    },
+    platform_apis: true,
+    certificate: "shared",
+    privileged: true,
+
+}
diff --git a/Android.mk b/Android.mk
deleted file mode 100644
index e5afdfb..0000000
--- a/Android.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-
-# Only compile source java files in this apk.
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_STATIC_JAVA_LIBRARIES += android-common guava
-
-LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.providers.blockednumber.*
-
-LOCAL_PACKAGE_NAME := BlockedNumberProvider
-LOCAL_PRIVATE_PLATFORM_APIS := true
-LOCAL_CERTIFICATE := shared
-LOCAL_PRIVILEGED_MODULE := true
-
-include $(BUILD_PACKAGE)
-
-# Use the following include to make our test apk.
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
deleted file mode 100644
index cd2206b..0000000
--- a/res/values-as/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 The Android Open Source 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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="3836152623003881586">"অৱৰোধ কৰা নম্বৰৰ সঞ্চয়াগাৰ"</string>
-</resources>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 3d1a1c1..be6a766 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -16,5 +16,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="3836152623003881586">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‏‎‎‏‏‎‎‎‎‎‎‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‎‎‏‎‎Blocked Numbers Storage‎‏‎‎‏‎"</string>
+    <string name="app_label" msgid="3836152623003881586">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‏‎‎‏‏‎‎‎‎‎‎‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‎‎‏‎‎Blocked Numbers Storage‎‏‎‎‏‎"</string>
 </resources>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 23dd405..80f05ec 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -16,5 +16,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="3836152623003881586">"अवरोधित केलेल्या नंबरचा स्टोरेज"</string>
+    <string name="app_label" msgid="3836152623003881586">"अवरोधित केलेल्या नंबरचा संचय"</string>
 </resources>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
deleted file mode 100644
index 5dea283..0000000
--- a/res/values-or/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 The Android Open Source 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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="3836152623003881586">"ଅବରୋଧିତ ସଂଖ୍ୟାର ଷ୍ଟୋରେଜ୍"</string>
-</resources>
diff --git a/src/com/android/providers/blockednumber/BlockedNumberProvider.java b/src/com/android/providers/blockednumber/BlockedNumberProvider.java
index 44a5f84..864f08a 100644
--- a/src/com/android/providers/blockednumber/BlockedNumberProvider.java
+++ b/src/com/android/providers/blockednumber/BlockedNumberProvider.java
@@ -308,8 +308,11 @@
         switch (method) {
             case BlockedNumberContract.METHOD_IS_BLOCKED:
                 enforceReadPermissionAndPrimaryUser();
-
-                res.putBoolean(BlockedNumberContract.RES_NUMBER_IS_BLOCKED, isBlocked(arg));
+                boolean isBlocked = isBlocked(arg);
+                res.putBoolean(BlockedNumberContract.RES_NUMBER_IS_BLOCKED, isBlocked);
+                res.putInt(BlockedNumberContract.RES_BLOCK_STATUS,
+                        isBlocked ? BlockedNumberContract.STATUS_BLOCKED_IN_LIST
+                                : BlockedNumberContract.STATUS_NOT_BLOCKED);
                 break;
             case BlockedNumberContract.METHOD_CAN_CURRENT_USER_BLOCK_NUMBERS:
                 // No permission checks: any app should be able to access this API.
@@ -341,8 +344,10 @@
                 break;
             case SystemContract.METHOD_SHOULD_SYSTEM_BLOCK_NUMBER:
                 enforceSystemReadPermissionAndPrimaryUser();
+                int blockReason = shouldSystemBlockNumber(arg, extras);
                 res.putBoolean(BlockedNumberContract.RES_NUMBER_IS_BLOCKED,
-                        shouldSystemBlockNumber(arg, extras));
+                        blockReason != BlockedNumberContract.STATUS_NOT_BLOCKED);
+                res.putInt(BlockedNumberContract.RES_BLOCK_STATUS, blockReason);
                 break;
             case SystemContract.METHOD_SHOULD_SHOW_EMERGENCY_CALL_NOTIFICATION:
                 enforceSystemReadPermissionAndPrimaryUser();
@@ -474,63 +479,85 @@
                 blockSuppressionExpiryTimeMillis);
     }
 
-    private boolean shouldSystemBlockNumber(String phoneNumber, Bundle extras) {
+    private int shouldSystemBlockNumber(String phoneNumber, Bundle extras) {
         if (getBlockSuppressionStatus().isSuppressed) {
-            return false;
+            return BlockedNumberContract.STATUS_NOT_BLOCKED;
         }
         if (isEmergencyNumber(phoneNumber)) {
-            return false;
+            return BlockedNumberContract.STATUS_NOT_BLOCKED;
         }
 
         boolean isBlocked = false;
+        int blockReason = BlockedNumberContract.STATUS_NOT_BLOCKED;
         if (extras != null && !extras.isEmpty()) {
             // check enhanced blocking setting
             boolean contactExist = extras.getBoolean(BlockedNumberContract.EXTRA_CONTACT_EXIST);
             int presentation = extras.getInt(BlockedNumberContract.EXTRA_CALL_PRESENTATION);
             switch (presentation) {
                 case TelecomManager.PRESENTATION_ALLOWED:
-                    isBlocked = getEnhancedBlockSetting(
+                    if (getEnhancedBlockSetting(
                             SystemContract.ENHANCED_SETTING_KEY_BLOCK_UNREGISTERED)
-                                    && !contactExist;
+                                    && !contactExist) {
+                        blockReason = BlockedNumberContract.STATUS_BLOCKED_NOT_IN_CONTACTS;
+                    }
                     break;
                 case TelecomManager.PRESENTATION_RESTRICTED:
-                    isBlocked = getEnhancedBlockSetting(
-                            SystemContract.ENHANCED_SETTING_KEY_BLOCK_PRIVATE);
+                    if (getEnhancedBlockSetting(
+                            SystemContract.ENHANCED_SETTING_KEY_BLOCK_PRIVATE)) {
+                        blockReason = BlockedNumberContract.STATUS_BLOCKED_RESTRICTED;
+                    }
                     break;
                 case TelecomManager.PRESENTATION_PAYPHONE:
-                    isBlocked = getEnhancedBlockSetting(
-                            SystemContract.ENHANCED_SETTING_KEY_BLOCK_PAYPHONE);
+                    if (getEnhancedBlockSetting(
+                            SystemContract.ENHANCED_SETTING_KEY_BLOCK_PAYPHONE)) {
+                        blockReason = BlockedNumberContract.STATUS_BLOCKED_PAYPHONE;
+                    }
                     break;
                 case TelecomManager.PRESENTATION_UNKNOWN:
-                    isBlocked = getEnhancedBlockSetting(
-                            SystemContract.ENHANCED_SETTING_KEY_BLOCK_UNKNOWN);
+                    if (getEnhancedBlockSetting(
+                            SystemContract.ENHANCED_SETTING_KEY_BLOCK_UNKNOWN)) {
+                        blockReason = BlockedNumberContract.STATUS_BLOCKED_UNKNOWN_NUMBER;
+                    }
                     break;
                 default:
                     break;
             }
         }
-        return isBlocked || isBlocked(phoneNumber);
+        if (blockReason == BlockedNumberContract.STATUS_NOT_BLOCKED && isBlocked(phoneNumber)) {
+            blockReason = BlockedNumberContract.STATUS_BLOCKED_IN_LIST;
+        }
+        return blockReason;
     }
 
     private boolean shouldShowEmergencyCallNotification() {
         return isEnhancedCallBlockingEnabledByPlatform()
-                && isAnyEnhancedBlockingSettingEnabled()
+                && (isShowCallBlockingDisabledNotificationAlways()
+                        || isAnyEnhancedBlockingSettingEnabled())
                 && getBlockSuppressionStatus().isSuppressed
                 && getEnhancedBlockSetting(
                         SystemContract.ENHANCED_SETTING_KEY_SHOW_EMERGENCY_CALL_NOTIFICATION);
     }
 
-    private boolean isEnhancedCallBlockingEnabledByPlatform() {
+    private PersistableBundle getCarrierConfig() {
         CarrierConfigManager configManager = (CarrierConfigManager) getContext().getSystemService(
                 Context.CARRIER_CONFIG_SERVICE);
         PersistableBundle carrierConfig = configManager.getConfig();
         if (carrierConfig == null) {
             carrierConfig = configManager.getDefaultConfig();
         }
-        return carrierConfig.getBoolean(
+        return carrierConfig;
+    }
+
+    private boolean isEnhancedCallBlockingEnabledByPlatform() {
+        return getCarrierConfig().getBoolean(
                 CarrierConfigManager.KEY_SUPPORT_ENHANCED_CALL_BLOCKING_BOOL);
     }
 
+    private boolean isShowCallBlockingDisabledNotificationAlways() {
+        return getCarrierConfig().getBoolean(
+                CarrierConfigManager.KEY_SHOW_CALL_BLOCKING_DISABLED_NOTIFICATION_ALWAYS_BOOL);
+    }
+
     private boolean isAnyEnhancedBlockingSettingEnabled() {
         return getEnhancedBlockSetting(SystemContract.ENHANCED_SETTING_KEY_BLOCK_UNREGISTERED)
                 || getEnhancedBlockSetting(SystemContract.ENHANCED_SETTING_KEY_BLOCK_PRIVATE)
diff --git a/tests/Android.bp b/tests/Android.bp
new file mode 100644
index 0000000..e4e57ed
--- /dev/null
+++ b/tests/Android.bp
@@ -0,0 +1,21 @@
+android_test {
+    name: "BlockedNumberProviderTest",
+    static_libs: [
+        "mockito-target-minus-junit4",
+        "android-support-test",
+    ],
+    libs: [
+        "android.test.runner",
+        "android.test.base",
+        "android.test.mock",
+    ],
+    // Only compile source java files in this apk.
+    srcs: ["src/**/*.java"],
+    platform_apis: true,
+    test_suites: ["device-tests"],
+    instrumentation_for: "BlockedNumberProvider",
+    certificate: "shared",
+    optimize: {
+        enabled: false,
+    },
+}
diff --git a/tests/Android.mk b/tests/Android.mk
deleted file mode 100644
index 379f7b8..0000000
--- a/tests/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-# We only want this apk build for tests.
-LOCAL_MODULE_TAGS := tests
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    mockito-target-minus-junit4 \
-    android-support-test
-
-LOCAL_JAVA_LIBRARIES := android.test.runner android.test.base android.test.mock
-
-# Only compile source java files in this apk.
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := BlockedNumberProviderTest
-LOCAL_PRIVATE_PLATFORM_APIS := true
-LOCAL_COMPATIBILITY_SUITE := device-tests
-
-LOCAL_INSTRUMENTATION_FOR := BlockedNumberProvider
-LOCAL_CERTIFICATE := shared
-
-LOCAL_PROGUARD_ENABLED := disabled
-
-include $(BUILD_PACKAGE)
diff --git a/tests/src/com/android/providers/blockednumber/BlockedNumberContractTest.java b/tests/src/com/android/providers/blockednumber/BlockedNumberContractTest.java
index 89cca78..93e9cee 100644
--- a/tests/src/com/android/providers/blockednumber/BlockedNumberContractTest.java
+++ b/tests/src/com/android/providers/blockednumber/BlockedNumberContractTest.java
@@ -16,6 +16,7 @@
 
 package com.android.providers.blockednumber;
 
+import static android.provider.BlockedNumberContract.STATUS_NOT_BLOCKED;
 import static android.provider.BlockedNumberContract.SystemContract
         .ENHANCED_SETTING_KEY_BLOCK_PAYPHONE;
 
@@ -97,8 +98,9 @@
     @SmallTest
     @Test
     public void testShouldSystemBlockNumberException() {
-        assertFalse(BlockedNumberContract.SystemContract.shouldSystemBlockNumber(mMockContext,
-                TEST_NUMBER, null));
+        assertEquals(STATUS_NOT_BLOCKED,
+                BlockedNumberContract.SystemContract.shouldSystemBlockNumber(mMockContext,
+                        TEST_NUMBER, null));
     }
 
     /**
diff --git a/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java b/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java
index 91d2430..828028f 100644
--- a/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java
+++ b/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java
@@ -611,19 +611,24 @@
         insert(cv(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, emergencyNumber));
 
         assertIsBlocked(true, emergencyNumber);
-        assertFalse(SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber, null));
+        assertEquals(BlockedNumberContract.STATUS_NOT_BLOCKED,
+                SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber, null));
 
         setEnhancedBlockSetting(SystemContract.ENHANCED_SETTING_KEY_BLOCK_UNREGISTERED, true);
-        assertFalse(SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber,
+        assertEquals(BlockedNumberContract.STATUS_NOT_BLOCKED,
+                SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber,
                 createBundleForEnhancedBlocking(TelecomManager.PRESENTATION_ALLOWED, false)));
         setEnhancedBlockSetting(SystemContract.ENHANCED_SETTING_KEY_BLOCK_PRIVATE, true);
-        assertFalse(SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber,
+        assertEquals(BlockedNumberContract.STATUS_NOT_BLOCKED,
+                SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber,
                 createBundleForEnhancedBlocking(TelecomManager.PRESENTATION_RESTRICTED, false)));
         setEnhancedBlockSetting(SystemContract.ENHANCED_SETTING_KEY_BLOCK_PAYPHONE, true);
-        assertFalse(SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber,
+        assertEquals(BlockedNumberContract.STATUS_NOT_BLOCKED,
+                SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber,
                 createBundleForEnhancedBlocking(TelecomManager.PRESENTATION_PAYPHONE, false)));
         setEnhancedBlockSetting(SystemContract.ENHANCED_SETTING_KEY_BLOCK_UNKNOWN, true);
-        assertFalse(SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber,
+        assertEquals(BlockedNumberContract.STATUS_NOT_BLOCKED,
+                SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber,
                 createBundleForEnhancedBlocking(TelecomManager.PRESENTATION_UNKNOWN, false)));
     }
 
@@ -707,8 +712,9 @@
     }
 
     private void assertShouldSystemBlock(boolean expected, String phoneNumber, Bundle extras) {
-        assertEquals(expected, SystemContract.shouldSystemBlockNumber(mMockContext, phoneNumber,
-                extras));
+        assertEquals(expected,
+                SystemContract.shouldSystemBlockNumber(mMockContext, phoneNumber, extras)
+                        != BlockedNumberContract.STATUS_NOT_BLOCKED);
     }
 
     private void setEnhancedBlockSetting(String key, boolean value) {
