summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrandon Maxwell <maxwelb@google.com>2016-03-21 17:03:22 +0000
committerandroid-build-merger <android-build-merger@google.com>2016-03-21 17:03:22 +0000
commit12c93d5a6e63d9cd4d8457551d41056ae12cd16c (patch)
treed300ab3da0e3d94d17632cfe498c0889ed3c08a0
parente5c0b968526379d93e82226710c2c32aa291f09f (diff)
parent25b094b0473bb52238d7d45d4ba69b0d9949121c (diff)
Merge "Only allow primary users to block numbers" into nyc-dev am: c98a563
am: 25b094b * commit '25b094b0473bb52238d7d45d4ba69b0d9949121c': Only allow primary users to block numbers
-rw-r--r--src-N/com/android/dialer/compat/BlockedNumbersSdkCompat.java5
-rw-r--r--src-pre-N/com/android/dialer/compat/BlockedNumbersSdkCompat.java5
-rw-r--r--src/com/android/dialer/CallDetailActivity.java15
-rw-r--r--src/com/android/dialer/calllog/CallLogListItemViewHolder.java4
-rw-r--r--src/com/android/dialer/compat/FilteredNumberCompat.java36
-rw-r--r--src/com/android/dialer/settings/DialerSettingsActivity.java23
-rw-r--r--tests/src/com/android/dialer/compat/FilteredNumberCompatTest.java54
7 files changed, 121 insertions, 21 deletions
diff --git a/src-N/com/android/dialer/compat/BlockedNumbersSdkCompat.java b/src-N/com/android/dialer/compat/BlockedNumbersSdkCompat.java
index 6c1625360..a60820732 100644
--- a/src-N/com/android/dialer/compat/BlockedNumbersSdkCompat.java
+++ b/src-N/com/android/dialer/compat/BlockedNumbersSdkCompat.java
@@ -16,7 +16,9 @@
package com.android.dialer.compat;
+import android.content.Context;
import android.net.Uri;
+import android.provider.BlockedNumberContract;
import android.provider.BlockedNumberContract.BlockedNumbers;
public class BlockedNumbersSdkCompat {
@@ -29,4 +31,7 @@ public class BlockedNumbersSdkCompat {
public static final String E164_NUMBER = BlockedNumbers.COLUMN_E164_NUMBER;
+ public static boolean canCurrentUserBlockNumbers(Context context) {
+ return BlockedNumberContract.canCurrentUserBlockNumbers(context);
+ }
}
diff --git a/src-pre-N/com/android/dialer/compat/BlockedNumbersSdkCompat.java b/src-pre-N/com/android/dialer/compat/BlockedNumbersSdkCompat.java
index cbdc59516..559d71899 100644
--- a/src-pre-N/com/android/dialer/compat/BlockedNumbersSdkCompat.java
+++ b/src-pre-N/com/android/dialer/compat/BlockedNumbersSdkCompat.java
@@ -16,6 +16,7 @@
package com.android.dialer.compat;
+import android.content.Context;
import android.net.Uri;
public class BlockedNumbersSdkCompat {
@@ -27,4 +28,8 @@ public class BlockedNumbersSdkCompat {
public static final String COLUMN_ORIGINAL_NUMBER = null;
public static final String E164_NUMBER = null;
+
+ public static boolean canCurrentUserBlockNumbers(Context context) {
+ return false;
+ }
}
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index 6c8d7708a..42bee1edf 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -59,7 +59,6 @@ import com.android.dialer.database.FilteredNumberAsyncQueryHandler;
import com.android.dialer.database.FilteredNumberAsyncQueryHandler.OnCheckBlockedListener;
import com.android.dialer.filterednumber.BlockNumberDialogFragment;
import com.android.dialer.filterednumber.FilteredNumbersUtil;
-import com.android.dialer.filterednumber.MigrateBlockedNumbersDialogFragment;
import com.android.dialer.logging.InteractionEvent;
import com.android.dialer.logging.Logger;
import com.android.dialer.util.DialerUtils;
@@ -156,7 +155,8 @@ public class CallDetailActivity extends AppCompatActivity
PhoneNumberUtil.canPlaceCallsTo(mNumber, mDetails.numberPresentation);
mCallButton.setVisibility(canPlaceCallsTo ? View.VISIBLE : View.GONE);
mCopyNumberActionItem.setVisibility(canPlaceCallsTo ? View.VISIBLE : View.GONE);
- mBlockNumberActionItem.setVisibility(canPlaceCallsTo ? View.VISIBLE : View.GONE);
+
+ updateBlockActionItemVisibility(canPlaceCallsTo ? View.VISIBLE : View.GONE);
final boolean isSipNumber = PhoneNumberUtil.isSipNumber(mNumber);
final boolean isVoicemailNumber =
@@ -277,7 +277,9 @@ public class CallDetailActivity extends AppCompatActivity
}
});
+
mBlockNumberActionItem = (TextView) findViewById(R.id.call_detail_action_block);
+ updateBlockActionItemVisibility(View.VISIBLE);
mBlockNumberActionItem.setOnClickListener(this);
mEditBeforeCallActionItem = findViewById(R.id.call_detail_action_edit_before_call);
mEditBeforeCallActionItem.setOnClickListener(this);
@@ -292,6 +294,13 @@ public class CallDetailActivity extends AppCompatActivity
}
}
+ private void updateBlockActionItemVisibility(int visibility) {
+ if (!FilteredNumberCompat.canAttemptBlockOperations(mContext)) {
+ visibility = View.GONE;
+ }
+ mBlockNumberActionItem.setVisibility(visibility);
+ }
+
@Override
public void onResume() {
super.onResume();
@@ -468,8 +477,6 @@ public class CallDetailActivity extends AppCompatActivity
mBlockNumberActionItem.setCompoundDrawablesRelativeWithIntrinsicBounds(
R.drawable.ic_call_detail_unblock, 0, 0, 0);
}
-
- mBlockNumberActionItem.setVisibility(View.VISIBLE);
}
private void closeSystemDialogs() {
diff --git a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
index 750914bdf..baf2e1ab5 100644
--- a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
+++ b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
@@ -55,7 +55,6 @@ import com.android.dialer.compat.FilteredNumberCompat;
import com.android.dialer.database.FilteredNumberAsyncQueryHandler;
import com.android.dialer.filterednumber.BlockNumberDialogFragment;
import com.android.dialer.filterednumber.FilteredNumbersUtil;
-import com.android.dialer.filterednumber.MigrateBlockedNumbersDialogFragment;
import com.android.dialer.logging.Logger;
import com.android.dialer.logging.ScreenEvent;
import com.android.dialer.service.ExtendedBlockingButtonRenderer;
@@ -346,7 +345,8 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
.setOnMenuItemClickListener(this);
}
- if (FilteredNumbersUtil.canBlockNumber(mContext, number, countryIso)) {
+ if (FilteredNumberCompat.canAttemptBlockOperations(mContext)
+ && FilteredNumbersUtil.canBlockNumber(mContext, number, countryIso)) {
mFilteredNumberAsyncQueryHandler.isBlockedNumber(
new FilteredNumberAsyncQueryHandler.OnCheckBlockedListener() {
@Override
diff --git a/src/com/android/dialer/compat/FilteredNumberCompat.java b/src/com/android/dialer/compat/FilteredNumberCompat.java
index c6c714b27..532cec5ac 100644
--- a/src/com/android/dialer/compat/FilteredNumberCompat.java
+++ b/src/com/android/dialer/compat/FilteredNumberCompat.java
@@ -25,6 +25,7 @@ import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
+import android.os.UserManager;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.telecom.TelecomManager;
@@ -293,4 +294,39 @@ public class FilteredNumberCompat {
}
return new Intent(context, BlockedNumbersSettingsActivity.class);
}
+
+ /**
+ * Method used to determine if block operations are possible.
+ *
+ * @param context The {@link Context}.
+ * @return {@code true} if the app and user can block numbers, {@code false} otherwise.
+ */
+ public static boolean canAttemptBlockOperations(Context context) {
+ if (!CompatUtils.isNCompatible()) {
+ // Dialer blocking, must be primary user
+ return UserManagerCompat.isSystemUser(
+ (UserManager) context.getSystemService(Context.USER_SERVICE));
+ }
+
+ // Great Wall blocking, must be primary user and the default or system dialer
+ // TODO(maxwelb): check that we're the default or system Dialer
+ return BlockedNumbersSdkCompat.canCurrentUserBlockNumbers(context);
+ }
+
+ /**
+ * Used to determine if the call blocking settings can be opened.
+ *
+ * @param context The {@link Context}.
+ * @return {@code true} if the current user can open the call blocking settings, {@code false}
+ * otherwise.
+ */
+ public static boolean canCurrentUserOpenBlockSettings(Context context) {
+ if (!CompatUtils.isNCompatible()) {
+ // Dialer blocking, must be primary user
+ return UserManagerCompat.isSystemUser(
+ (UserManager) context.getSystemService(Context.USER_SERVICE));
+ }
+ // BlockedNumberContract blocking, verify through Contract API
+ return BlockedNumbersSdkCompat.canCurrentUserBlockNumbers(context);
+ }
}
diff --git a/src/com/android/dialer/settings/DialerSettingsActivity.java b/src/com/android/dialer/settings/DialerSettingsActivity.java
index bbcbd49fc..fc689d037 100644
--- a/src/com/android/dialer/settings/DialerSettingsActivity.java
+++ b/src/com/android/dialer/settings/DialerSettingsActivity.java
@@ -94,22 +94,21 @@ public class DialerSettingsActivity extends AppCompatPreferenceActivity {
phoneAccountSettingsHeader.intent = phoneAccountSettingsIntent;
target.add(phoneAccountSettingsHeader);
}
- if (isPrimaryUser) {
+ if (FilteredNumberCompat.canCurrentUserOpenBlockSettings(this)) {
Header blockedCallsHeader = new Header();
blockedCallsHeader.titleRes = R.string.manage_blocked_numbers_label;
blockedCallsHeader.intent = FilteredNumberCompat.createManageBlockedNumbersIntent(this);
target.add(blockedCallsHeader);
-
- if (TelephonyManagerCompat.isTtyModeSupported(telephonyManager)
- || TelephonyManagerCompat
- .isHearingAidCompatibilitySupported(telephonyManager)) {
- Header accessibilitySettingsHeader = new Header();
- Intent accessibilitySettingsIntent =
- new Intent(TelecomManager.ACTION_SHOW_CALL_ACCESSIBILITY_SETTINGS);
- accessibilitySettingsHeader.titleRes = R.string.accessibility_settings_title;
- accessibilitySettingsHeader.intent = accessibilitySettingsIntent;
- target.add(accessibilitySettingsHeader);
- }
+ }
+ if (isPrimaryUser
+ && (TelephonyManagerCompat.isTtyModeSupported(telephonyManager)
+ || TelephonyManagerCompat.isHearingAidCompatibilitySupported(telephonyManager))) {
+ Header accessibilitySettingsHeader = new Header();
+ Intent accessibilitySettingsIntent =
+ new Intent(TelecomManager.ACTION_SHOW_CALL_ACCESSIBILITY_SETTINGS);
+ accessibilitySettingsHeader.titleRes = R.string.accessibility_settings_title;
+ accessibilitySettingsHeader.intent = accessibilitySettingsIntent;
+ target.add(accessibilitySettingsHeader);
}
}
diff --git a/tests/src/com/android/dialer/compat/FilteredNumberCompatTest.java b/tests/src/com/android/dialer/compat/FilteredNumberCompatTest.java
index 5ee2f28e1..3572316db 100644
--- a/tests/src/com/android/dialer/compat/FilteredNumberCompatTest.java
+++ b/tests/src/com/android/dialer/compat/FilteredNumberCompatTest.java
@@ -18,19 +18,20 @@ package com.android.dialer.compat;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.ComponentName;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
-import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
+import android.os.UserManager;
import android.provider.BlockedNumberContract.BlockedNumbers;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
-import android.util.Log;
import com.android.contacts.common.compat.CompatUtils;
import com.android.dialer.DialerApplication;
@@ -41,7 +42,6 @@ import com.android.dialer.database.FilteredNumberContract.FilteredNumberTypes;
import com.android.dialer.filterednumber.BlockedNumbersSettingsActivity;
import org.mockito.Mock;
-import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import java.util.Arrays;
@@ -227,6 +227,54 @@ public class FilteredNumberCompatTest extends AndroidTestCase {
.getComponent()));
}
+ public void testCanCurrentUserOpenBlockSettings_M_SecondaryUser() {
+ if (CompatUtils.isNCompatible()) {
+ return;
+ }
+ UserManager userManager = mock(UserManager.class);
+ when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(userManager);
+ when(userManager.isSystemUser()).thenReturn(false);
+ assertFalse(FilteredNumberCompat.canCurrentUserOpenBlockSettings(mContext));
+ verify(mContext).getSystemService(Context.USER_SERVICE);
+ verify(userManager).isSystemUser();
+ }
+
+ public void testCanCurrentUserOpenBlockSettings_M_PrimaryUser() {
+ if (CompatUtils.isNCompatible()) {
+ return;
+ }
+ UserManager userManager = mock(UserManager.class);
+ when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(userManager);
+ when(userManager.isSystemUser()).thenReturn(true);
+ assertTrue(FilteredNumberCompat.canCurrentUserOpenBlockSettings(mContext));
+ verify(mContext).getSystemService(Context.USER_SERVICE);
+ verify(userManager).isSystemUser();
+ }
+
+ public void testCanAttemptBlockOperations_M_SecondaryUser() {
+ if (CompatUtils.isNCompatible()) {
+ return;
+ }
+ UserManager userManager = mock(UserManager.class);
+ when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(userManager);
+ when(userManager.isSystemUser()).thenReturn(false);
+ assertFalse(FilteredNumberCompat.canAttemptBlockOperations(mContext));
+ verify(mContext).getSystemService(Context.USER_SERVICE);
+ verify(userManager).isSystemUser();
+ }
+
+ public void testCanAttemptBlockOperations_M_PrimaryUser() {
+ if (CompatUtils.isNCompatible()) {
+ return;
+ }
+ UserManager userManager = mock(UserManager.class);
+ when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(userManager);
+ when(userManager.isSystemUser()).thenReturn(true);
+ assertTrue(FilteredNumberCompat.canAttemptBlockOperations(mContext));
+ verify(mContext).getSystemService(Context.USER_SERVICE);
+ verify(userManager).isSystemUser();
+ }
+
private ContentValues newExpectedContentValuesM(String number, String e164Number,
String countryIso) {
ContentValues contentValues = new ContentValues();