Merge "Disable bubbles for low ram devices" into rvc-qpr-dev

This commit is contained in:
TreeHugger Robot
2020-09-22 17:11:41 +00:00
committed by Android (Google) Code Review
8 changed files with 103 additions and 5 deletions

View File

@@ -18,6 +18,7 @@ package com.android.settings.notification;
import static android.provider.Settings.Global.NOTIFICATION_BUBBLES; import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
import android.app.ActivityManager;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.database.ContentObserver; import android.database.ContentObserver;
@@ -81,7 +82,8 @@ public class BubbleNotificationPreferenceController extends TogglePreferenceCont
@Override @Override
public int getAvailabilityStatus() { public int getAvailabilityStatus() {
return AVAILABLE; ActivityManager am = mContext.getSystemService(ActivityManager.class);
return am.isLowRamDevice() ? UNSUPPORTED_ON_DEVICE : AVAILABLE;
} }
@Override @Override

View File

@@ -18,6 +18,7 @@ package com.android.settings.notification;
import static android.provider.Settings.Global.NOTIFICATION_BUBBLES; import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
import android.app.ActivityManager;
import android.content.Context; import android.content.Context;
import android.provider.Settings; import android.provider.Settings;
@@ -48,7 +49,8 @@ public class BubbleSummaryNotificationPreferenceController extends BasePreferenc
@Override @Override
public int getAvailabilityStatus() { public int getAvailabilityStatus() {
return AVAILABLE; ActivityManager am = mContext.getSystemService(ActivityManager.class);
return am.isLowRamDevice() ? UNSUPPORTED_ON_DEVICE : AVAILABLE;
} }
private boolean areBubblesEnabled() { private boolean areBubblesEnabled() {

View File

@@ -19,6 +19,7 @@ package com.android.settings.notification.app;
import static android.app.NotificationManager.BUBBLE_PREFERENCE_NONE; import static android.app.NotificationManager.BUBBLE_PREFERENCE_NONE;
import static android.provider.Settings.Global.NOTIFICATION_BUBBLES; import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
import android.app.ActivityManager;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.content.Context; import android.content.Context;
import android.provider.Settings; import android.provider.Settings;
@@ -139,7 +140,8 @@ public class BubblePreferenceController extends NotificationPreferenceController
} }
private boolean isGloballyEnabled() { private boolean isGloballyEnabled() {
return Settings.Global.getInt(mContext.getContentResolver(), ActivityManager am = mContext.getSystemService(ActivityManager.class);
return !am.isLowRamDevice() && Settings.Global.getInt(mContext.getContentResolver(),
NOTIFICATION_BUBBLES, SYSTEM_WIDE_OFF) == SYSTEM_WIDE_ON; NOTIFICATION_BUBBLES, SYSTEM_WIDE_OFF) == SYSTEM_WIDE_ON;
} }

View File

@@ -20,6 +20,7 @@ import static android.app.NotificationManager.BUBBLE_PREFERENCE_ALL;
import static android.app.NotificationManager.BUBBLE_PREFERENCE_NONE; import static android.app.NotificationManager.BUBBLE_PREFERENCE_NONE;
import static android.provider.Settings.Global.NOTIFICATION_BUBBLES; import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
import android.app.ActivityManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources; import android.content.res.Resources;
@@ -99,7 +100,8 @@ public class BubbleSummaryPreferenceController extends NotificationPreferenceCon
} }
private boolean isGloballyEnabled() { private boolean isGloballyEnabled() {
return Settings.Global.getInt(mContext.getContentResolver(), ActivityManager am = mContext.getSystemService(ActivityManager.class);
return !am.isLowRamDevice() && Settings.Global.getInt(mContext.getContentResolver(),
NOTIFICATION_BUBBLES, ON) == ON; NOTIFICATION_BUBBLES, ON) == ON;
} }
} }

View File

@@ -19,6 +19,7 @@ package com.android.settings.notification;
import static android.provider.Settings.Global.NOTIFICATION_BUBBLES; import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
import static com.android.settings.core.BasePreferenceController.AVAILABLE; import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
import static com.android.settings.notification.BadgingNotificationPreferenceController.OFF; import static com.android.settings.notification.BadgingNotificationPreferenceController.OFF;
import static com.android.settings.notification.BadgingNotificationPreferenceController.ON; import static com.android.settings.notification.BadgingNotificationPreferenceController.ON;
@@ -29,6 +30,7 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.ActivityManager;
import android.content.Context; import android.content.Context;
import android.provider.Settings; import android.provider.Settings;
@@ -44,6 +46,8 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowActivityManager;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class BubbleNotificationPreferenceControllerTest { public class BubbleNotificationPreferenceControllerTest {
@@ -69,7 +73,18 @@ public class BubbleNotificationPreferenceControllerTest {
} }
@Test @Test
public void getAvilabilityStatus_returnsAvailable() { public void isAvailable_lowRam_returnsUnsupported() {
final ShadowActivityManager activityManager =
Shadow.extract(mContext.getSystemService(ActivityManager.class));
activityManager.setIsLowRamDevice(true);
assertEquals(UNSUPPORTED_ON_DEVICE, mController.getAvailabilityStatus());
}
@Test
public void isAvailable_notLowRam_returnsAvailable() {
final ShadowActivityManager activityManager =
Shadow.extract(mContext.getSystemService(ActivityManager.class));
activityManager.setIsLowRamDevice(false);
assertEquals(AVAILABLE, mController.getAvailabilityStatus()); assertEquals(AVAILABLE, mController.getAvailabilityStatus());
} }

View File

@@ -18,11 +18,14 @@ package com.android.settings.notification;
import static android.provider.Settings.Global.NOTIFICATION_BUBBLES; import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
import static com.android.settings.notification.BadgingNotificationPreferenceController.OFF; import static com.android.settings.notification.BadgingNotificationPreferenceController.OFF;
import static com.android.settings.notification.BadgingNotificationPreferenceController.ON; import static com.android.settings.notification.BadgingNotificationPreferenceController.ON;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import android.app.ActivityManager;
import android.content.Context; import android.content.Context;
import android.provider.Settings; import android.provider.Settings;
@@ -35,6 +38,8 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowActivityManager;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class BubbleSummaryNotificationPreferenceControllerTest { public class BubbleSummaryNotificationPreferenceControllerTest {
@@ -68,4 +73,20 @@ public class BubbleSummaryNotificationPreferenceControllerTest {
String onString = mContext.getString(R.string.notifications_bubble_setting_on_summary); String onString = mContext.getString(R.string.notifications_bubble_setting_on_summary);
assertThat(mController.getSummary()).isEqualTo(onString); assertThat(mController.getSummary()).isEqualTo(onString);
} }
@Test
public void isAvailable_lowRam_returnsUnsupported() {
final ShadowActivityManager activityManager =
Shadow.extract(mContext.getSystemService(ActivityManager.class));
activityManager.setIsLowRamDevice(true);
assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
}
@Test
public void isAvailable_notLowRam_returnsAvailable() {
final ShadowActivityManager activityManager =
Shadow.extract(mContext.getSystemService(ActivityManager.class));
activityManager.setIsLowRamDevice(false);
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
}
} }

View File

@@ -42,6 +42,7 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.ActivityManager;
import android.app.NotificationChannel; import android.app.NotificationChannel;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.content.Context; import android.content.Context;
@@ -67,7 +68,9 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowApplication; import org.robolectric.shadows.ShadowApplication;
import org.robolectric.shadows.ShadowActivityManager;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -158,6 +161,18 @@ public class BubblePreferenceControllerTest {
assertFalse(mController.isAvailable()); assertFalse(mController.isAvailable());
} }
@Test
public void isNotAvailable_ifLowRam() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
mController.onResume(appRow, null, null, null, null, null);
final ShadowActivityManager activityManager =
Shadow.extract(mContext.getSystemService(ActivityManager.class));
activityManager.setIsLowRamDevice(true);
assertFalse(mController.isAvailable());
}
@Test @Test
public void isAvailable_notIfOffGlobally_channel() { public void isAvailable_notIfOffGlobally_channel() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
@@ -170,6 +185,18 @@ public class BubblePreferenceControllerTest {
assertFalse(mController.isAvailable()); assertFalse(mController.isAvailable());
} }
@Test
public void isAvailable_ifNotLowRam() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
mController.onResume(appRow, null, null, null, null, null);
Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON);
final ShadowActivityManager activityManager =
Shadow.extract(mContext.getSystemService(ActivityManager.class));
activityManager.setIsLowRamDevice(false);
assertTrue(mController.isAvailable());
}
@Test @Test
public void isAvailable_app_evenIfOffGlobally() { public void isAvailable_app_evenIfOffGlobally() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();

View File

@@ -23,6 +23,8 @@ import static android.app.NotificationManager.BUBBLE_PREFERENCE_SELECTED;
import static android.app.NotificationManager.IMPORTANCE_HIGH; import static android.app.NotificationManager.IMPORTANCE_HIGH;
import static android.provider.Settings.Global.NOTIFICATION_BUBBLES; import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
import static com.android.settings.notification.app.BubblePreferenceController.SYSTEM_WIDE_OFF; import static com.android.settings.notification.app.BubblePreferenceController.SYSTEM_WIDE_OFF;
import static com.android.settings.notification.app.BubblePreferenceController.SYSTEM_WIDE_ON; import static com.android.settings.notification.app.BubblePreferenceController.SYSTEM_WIDE_ON;
@@ -37,6 +39,7 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.ActivityManager;
import android.app.NotificationChannel; import android.app.NotificationChannel;
import android.content.Context; import android.content.Context;
import android.provider.Settings; import android.provider.Settings;
@@ -53,6 +56,8 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowActivityManager;
import org.robolectric.shadows.ShadowApplication; import org.robolectric.shadows.ShadowApplication;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@@ -139,6 +144,28 @@ public class BubbleSummaryPreferenceControllerTest {
assertTrue(mController.isAvailable()); assertTrue(mController.isAvailable());
} }
@Test
public void isAvailable_lowRam_shouldReturnFalse() {
Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON);
mController.onResume(mAppRow, null, null, null, null, null);
final ShadowActivityManager activityManager =
Shadow.extract(mContext.getSystemService(ActivityManager.class));
activityManager.setIsLowRamDevice(true);
assertFalse(mController.isAvailable());
}
@Test
public void isAvailable_notLowRam_shouldReturnTrue() {
Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON);
mController.onResume(mAppRow, null, null, null, null, null);
final ShadowActivityManager activityManager =
Shadow.extract(mContext.getSystemService(ActivityManager.class));
activityManager.setIsLowRamDevice(false);
assertTrue(mController.isAvailable());
}
@Test @Test
public void updateState_setsIntent() { public void updateState_setsIntent() {
mAppRow.bubblePreference = BUBBLE_PREFERENCE_ALL; mAppRow.bubblePreference = BUBBLE_PREFERENCE_ALL;