diff --git a/src/com/android/settings/notification/NotificationAssistantPreferenceController.java b/src/com/android/settings/notification/NotificationAssistantPreferenceController.java index 5c591b894ac..66f27fef953 100644 --- a/src/com/android/settings/notification/NotificationAssistantPreferenceController.java +++ b/src/com/android/settings/notification/NotificationAssistantPreferenceController.java @@ -16,18 +16,46 @@ package com.android.settings.notification; +import android.content.ComponentName; import android.content.Context; +import android.content.pm.PackageManager; +import android.os.UserHandle; import com.android.settings.core.BasePreferenceController; +import com.android.settingslib.applications.DefaultAppInfo; +import com.android.settingslib.widget.CandidateInfo; + +import com.google.common.annotations.VisibleForTesting; public class NotificationAssistantPreferenceController extends BasePreferenceController { + @VisibleForTesting + protected NotificationBackend mNotificationBackend; + private PackageManager mPackageManager; + public NotificationAssistantPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); + mNotificationBackend = new NotificationBackend(); + mPackageManager = mContext.getPackageManager(); } @Override public int getAvailabilityStatus() { return BasePreferenceController.AVAILABLE; } + + @Override + public CharSequence getSummary() { + CandidateInfo appSelected = new NotificationAssistantPicker.CandidateNone(mContext); + ComponentName assistant = mNotificationBackend.getAllowedNotificationAssistant(); + if (assistant != null) { + appSelected = createCandidateInfo(assistant); + } + return appSelected.loadLabel(); + } + + @VisibleForTesting + protected CandidateInfo createCandidateInfo(ComponentName cn) { + return new DefaultAppInfo(mContext, mPackageManager, UserHandle.myUserId(), cn); + } } diff --git a/tests/robotests/src/com/android/settings/notification/NotificationAssistantPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/NotificationAssistantPreferenceControllerTest.java new file mode 100644 index 00000000000..b2f65e06d7b --- /dev/null +++ b/tests/robotests/src/com/android/settings/notification/NotificationAssistantPreferenceControllerTest.java @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2019 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 static junit.framework.TestCase.assertEquals; + +import static org.mockito.Mockito.when; + +import android.content.ComponentName; +import android.content.Context; +import android.content.pm.PackageManager; +import android.graphics.drawable.Drawable; +import android.os.Debug; + +import com.android.settingslib.widget.CandidateInfo; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; + +@RunWith(RobolectricTestRunner.class) +public class NotificationAssistantPreferenceControllerTest { + + private static final String KEY = "TEST_KEY"; + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private Context mContext; + @Mock + private NotificationBackend mBackend; + private NotificationAssistantPreferenceController mPreferenceController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = RuntimeEnvironment.application; + mPreferenceController = new TestPreferenceController(mContext, mBackend); + } + + @Test + public void testGetSummary_noAssistant() { + when(mBackend.getAllowedNotificationAssistant()).thenReturn(null); + CharSequence noneLabel = new NotificationAssistantPicker.CandidateNone(mContext) + .loadLabel(); + assertEquals(noneLabel, mPreferenceController.getSummary()); + } + + @Test + public void testGetSummary_TestAssistant() { + String testName = "test_pkg/test_cls"; + when(mBackend.getAllowedNotificationAssistant()).thenReturn( + ComponentName.unflattenFromString(testName)); + assertEquals(testName, mPreferenceController.getSummary()); + } + + private final class TestPreferenceController extends NotificationAssistantPreferenceController { + + private TestPreferenceController(Context context, NotificationBackend backend) { + super(context, KEY); + mNotificationBackend = backend; + } + + @Override + public String getPreferenceKey() { + return KEY; + } + + @Override + protected CandidateInfo createCandidateInfo(ComponentName cn) { + return new CandidateInfo(true) { + @Override + public CharSequence loadLabel() { return cn.flattenToString(); } + + @Override + public Drawable loadIcon() { return null; } + + @Override + public String getKey() { return null; } + }; + } + } + +}