Merge "Add suppressor text in SummaryProvider of Sound when it exists."
diff --git a/src/com/android/settings/notification/RingVolumePreferenceController.java b/src/com/android/settings/notification/RingVolumePreferenceController.java
index 2297837..a94d086 100644
--- a/src/com/android/settings/notification/RingVolumePreferenceController.java
+++ b/src/com/android/settings/notification/RingVolumePreferenceController.java
@@ -119,9 +119,7 @@
if (Objects.equals(suppressor, mSuppressor)) return;
mSuppressor = suppressor;
if (mPreference != null) {
- final String text = suppressor != null ?
- mContext.getString(com.android.internal.R.string.muted_by,
- getSuppressorCaption(suppressor)) : null;
+ final String text = SuppressorHelper.getSuppressionText(mContext, suppressor);
mPreference.setSuppressionText(text);
}
updatePreferenceIcon();
@@ -137,25 +135,6 @@
}
}
- private String getSuppressorCaption(ComponentName suppressor) {
- final PackageManager pm = mContext.getPackageManager();
- try {
- final ServiceInfo info = pm.getServiceInfo(suppressor, 0);
- if (info != null) {
- final CharSequence seq = info.loadLabel(pm);
- if (seq != null) {
- final String str = seq.toString().trim();
- if (str.length() > 0) {
- return str;
- }
- }
- }
- } catch (Throwable e) {
- Log.w(TAG, "Error loading suppressor caption", e);
- }
- return suppressor.getPackageName();
- }
-
private final class H extends Handler {
private static final int UPDATE_EFFECTS_SUPPRESSOR = 1;
private static final int UPDATE_RINGER_MODE = 2;
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index 5f53d9a..b82931a 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -19,6 +19,8 @@
import android.app.Activity;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
@@ -40,7 +42,6 @@
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.search.BaseSearchIndexProvider;
-
import com.android.settingslib.drawer.CategoryKey;
import java.text.NumberFormat;
import java.util.ArrayList;
@@ -251,7 +252,15 @@
AudioManager.STREAM_RING) / maxVolume);
resId = R.string.sound_settings_summary;
}
- mSummaryLoader.setSummary(this, mContext.getString(resId, percent));
+
+ final ComponentName suppressor = NotificationManager.from(mContext)
+ .getEffectsSuppressor();
+ if (suppressor != null) {
+ String suppressText = SuppressorHelper.getSuppressionText(mContext, suppressor);
+ mSummaryLoader.setSummary(this, suppressText);
+ } else {
+ mSummaryLoader.setSummary(this, mContext.getString(resId, percent));
+ }
}
}
diff --git a/src/com/android/settings/notification/SuppressorHelper.java b/src/com/android/settings/notification/SuppressorHelper.java
new file mode 100644
index 0000000..8bf4d83
--- /dev/null
+++ b/src/com/android/settings/notification/SuppressorHelper.java
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+
+package com.android.settings.notification;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.ServiceInfo;
+import android.support.annotation.VisibleForTesting;
+import android.util.Log;
+
+public class SuppressorHelper {
+ private static final String TAG = "SuppressorHelper";
+
+ public static String getSuppressionText(Context context, ComponentName suppressor) {
+ return suppressor != null ?
+ context.getString(com.android.internal.R.string.muted_by,
+ getSuppressorCaption(context, suppressor)) : null;
+ }
+
+ @VisibleForTesting
+ static String getSuppressorCaption(Context context, ComponentName suppressor) {
+ final PackageManager pm = context.getPackageManager();
+ try {
+ final ServiceInfo info = pm.getServiceInfo(suppressor, 0);
+ if (info != null) {
+ final CharSequence seq = info.loadLabel(pm);
+ if (seq != null) {
+ final String str = seq.toString().trim();
+ if (str.length() > 0) {
+ return str;
+ }
+ }
+ }
+ } catch (Throwable e) {
+ Log.w(TAG, "Error loading suppressor caption", e);
+ }
+ return suppressor.getPackageName();
+ }
+
+}
diff --git a/tests/robotests/src/com/android/settings/notification/SuppressorHelperTest.java b/tests/robotests/src/com/android/settings/notification/SuppressorHelperTest.java
new file mode 100644
index 0000000..86f3d81
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/SuppressorHelperTest.java
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+package com.android.settings.notification;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.ServiceInfo;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.when;
+
+public class SuppressorHelperTest {
+ private static final String SUPPRESSOR_NAME = "wear";
+
+ private ComponentName mSuppressor;
+ @Mock
+ private Context mContext;
+ @Mock
+ private PackageManager mPackageManager;
+ @Mock
+ private ServiceInfo mServiceInfo;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mSuppressor = new ComponentName("", "");
+
+ try {
+ when(mContext.getPackageManager()).thenReturn(mPackageManager);
+ when(mPackageManager.getServiceInfo(mSuppressor, 0)).thenReturn(mServiceInfo);
+ when(mServiceInfo.loadLabel(mPackageManager)).thenReturn(new String(SUPPRESSOR_NAME));
+ } catch (PackageManager.NameNotFoundException e) {
+ // Do nothing. This exception will never happen in mock
+ }
+ }
+
+ @Test
+ public void testGetSuppressionText_SuppressorNull_ReturnNull() {
+ String text = SuppressorHelper.getSuppressionText(mContext, null);
+ assertThat(text).isNull();
+ }
+
+ @Test
+ public void testGetSuppressorCaption_SuppressorNotNull_ReturnSuppressorName() {
+ String text = SuppressorHelper.getSuppressorCaption(mContext, mSuppressor);
+ assertThat(text).isEqualTo(SUPPRESSOR_NAME);
+ }
+}