1 /* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.notification; 18 19 import static android.app.NotificationManager.IMPORTANCE_DEFAULT; 20 import static android.app.NotificationManager.IMPORTANCE_LOW; 21 22 import static com.google.common.truth.Truth.assertThat; 23 24 import static org.mockito.Mockito.mock; 25 import static org.mockito.Mockito.spy; 26 import static org.mockito.Mockito.times; 27 import static org.mockito.Mockito.verify; 28 29 import android.content.Context; 30 import android.graphics.drawable.Drawable; 31 import android.view.LayoutInflater; 32 import android.view.View; 33 import android.view.ViewGroup; 34 import android.widget.Button; 35 import android.widget.ImageView; 36 import android.widget.LinearLayout; 37 import android.widget.TextView; 38 39 import com.android.settings.R; 40 41 import org.junit.Before; 42 import org.junit.Test; 43 import org.junit.runner.RunWith; 44 import org.robolectric.RobolectricTestRunner; 45 import org.robolectric.RuntimeEnvironment; 46 47 import androidx.preference.PreferenceViewHolder; 48 49 @RunWith(RobolectricTestRunner.class) 50 public class ImportancePreferenceTest { 51 52 private Context mContext; 53 54 @Before setUp()55 public void setUp() { 56 mContext = RuntimeEnvironment.application; 57 } 58 59 @Test createNewPreference_shouldSetLayout()60 public void createNewPreference_shouldSetLayout() { 61 final ImportancePreference preference = new ImportancePreference(mContext); 62 assertThat(preference.getLayoutResource()).isEqualTo( 63 R.layout.notif_importance_preference); 64 } 65 66 @Test onBindViewHolder_nonConfigurable()67 public void onBindViewHolder_nonConfigurable() { 68 final ImportancePreference preference = new ImportancePreference(mContext); 69 final LayoutInflater inflater = LayoutInflater.from(mContext); 70 PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests( 71 inflater.inflate(R.layout.notif_importance_preference, null)); 72 Drawable unselected = mock(Drawable.class); 73 Drawable selected = mock(Drawable.class); 74 preference.selectedBackground = selected; 75 preference.unselectedBackground = unselected; 76 77 preference.setConfigurable(false); 78 preference.setImportance(IMPORTANCE_DEFAULT); 79 preference.onBindViewHolder(holder); 80 81 assertThat(holder.itemView.findViewById(R.id.silence).isEnabled()).isFalse(); 82 assertThat(holder.itemView.findViewById(R.id.alert).isEnabled()).isFalse(); 83 84 assertThat(holder.itemView.findViewById(R.id.alert).getBackground()).isEqualTo(selected); 85 assertThat(holder.itemView.findViewById(R.id.silence).getBackground()) 86 .isEqualTo(unselected); 87 88 // other button 89 preference.setImportance(IMPORTANCE_LOW); 90 holder = PreferenceViewHolder.createInstanceForTests( 91 inflater.inflate(R.layout.notif_importance_preference, null)); 92 preference.onBindViewHolder(holder); 93 94 assertThat(holder.itemView.findViewById(R.id.alert).getBackground()).isEqualTo(unselected); 95 assertThat(holder.itemView.findViewById(R.id.silence).getBackground()).isEqualTo(selected); 96 } 97 98 @Test onBindViewHolder_selectButtonAndText()99 public void onBindViewHolder_selectButtonAndText() { 100 final ImportancePreference preference = new ImportancePreference(mContext); 101 final LayoutInflater inflater = LayoutInflater.from(mContext); 102 final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests( 103 inflater.inflate(R.layout.notif_importance_preference, null)); 104 Drawable unselected = mock(Drawable.class); 105 Drawable selected = mock(Drawable.class); 106 preference.selectedBackground = selected; 107 preference.unselectedBackground = unselected; 108 109 preference.setConfigurable(true); 110 preference.setImportance(IMPORTANCE_DEFAULT); 111 112 preference.onBindViewHolder(holder); 113 114 assertThat(holder.itemView.findViewById(R.id.alert).getBackground()).isEqualTo(selected); 115 assertThat(holder.itemView.findViewById(R.id.silence).getBackground()) 116 .isEqualTo(unselected); 117 assertThat(((TextView) holder.itemView.findViewById(R.id.alert_summary)).getText()) 118 .isEqualTo(mContext.getString(R.string.notification_channel_summary_default)); 119 } 120 121 @Test onClick_changesUICallsListener()122 public void onClick_changesUICallsListener() { 123 final ImportancePreference preference = spy(new ImportancePreference(mContext)); 124 final LayoutInflater inflater = LayoutInflater.from(mContext); 125 final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests( 126 inflater.inflate(R.layout.notif_importance_preference, null)); 127 Drawable unselected = mock(Drawable.class); 128 Drawable selected = mock(Drawable.class); 129 preference.selectedBackground = selected; 130 preference.unselectedBackground = unselected; 131 132 preference.setConfigurable(true); 133 preference.setImportance(IMPORTANCE_DEFAULT); 134 preference.onBindViewHolder(holder); 135 136 View silenceButton = holder.itemView.findViewById(R.id.silence); 137 138 silenceButton.callOnClick(); 139 140 assertThat(holder.itemView.findViewById(R.id.alert).getBackground()).isEqualTo(unselected); 141 assertThat(holder.itemView.findViewById(R.id.silence).getBackground()).isEqualTo(selected); 142 143 verify(preference, times(1)).callChangeListener(IMPORTANCE_LOW); 144 } 145 146 @Test setImportanceSummary()147 public void setImportanceSummary() { 148 final ImportancePreference preference = spy(new ImportancePreference(mContext)); 149 final LayoutInflater inflater = LayoutInflater.from(mContext); 150 final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests( 151 inflater.inflate(R.layout.notif_importance_preference, null)); 152 153 preference.setConfigurable(true); 154 preference.setImportance(IMPORTANCE_DEFAULT); 155 preference.onBindViewHolder(holder); 156 157 TextView tv = holder.itemView.findViewById(R.id.silence_summary); 158 159 preference.setDisplayInStatusBar(true); 160 preference.setDisplayOnLockscreen(true); 161 162 preference.setImportanceSummary((ViewGroup) holder.itemView, IMPORTANCE_LOW, true); 163 164 assertThat(tv.getText()).isEqualTo( 165 mContext.getString(R.string.notification_channel_summary_low)); 166 } 167 168 @Test setImportanceSummary_default()169 public void setImportanceSummary_default() { 170 final ImportancePreference preference = spy(new ImportancePreference(mContext)); 171 final LayoutInflater inflater = LayoutInflater.from(mContext); 172 final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests( 173 inflater.inflate(R.layout.notif_importance_preference, null)); 174 175 preference.setConfigurable(true); 176 preference.setImportance(IMPORTANCE_DEFAULT); 177 preference.onBindViewHolder(holder); 178 179 TextView tv = holder.itemView.findViewById(R.id.alert_summary); 180 181 preference.setDisplayInStatusBar(true); 182 preference.setDisplayOnLockscreen(true); 183 184 preference.setImportanceSummary((ViewGroup) holder.itemView, IMPORTANCE_DEFAULT, true); 185 186 assertThat(tv.getText()).isEqualTo( 187 mContext.getString(R.string.notification_channel_summary_default)); 188 } 189 } 190