From ee3142cc874cab9781894d6e64c0cb7945480b29 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Mon, 14 May 2018 14:40:01 -0400 Subject: [PATCH 1/9] Delay index job a little bit Make sure it doesn't cause jank while launching settings. Test: existing Change-Id: I410315469319b2156495f2d8b296fc164c475cb9 Fixes: 78787416 --- src/com/android/settings/search/DeviceIndexFeatureProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/settings/search/DeviceIndexFeatureProvider.java b/src/com/android/settings/search/DeviceIndexFeatureProvider.java index a171844559a..8e64d795b2c 100644 --- a/src/com/android/settings/search/DeviceIndexFeatureProvider.java +++ b/src/com/android/settings/search/DeviceIndexFeatureProvider.java @@ -65,7 +65,7 @@ public interface DeviceIndexFeatureProvider { context.getSystemService(JobScheduler.class).schedule( new JobInfo.Builder(jobId, jobComponent) .setPersisted(true) - .setMinimumLatency(1) + .setMinimumLatency(1000) .setOverrideDeadline(1) .build()); From 5eca0c81e6ad7d27cc81822ed77b3b8038b892ae Mon Sep 17 00:00:00 2001 From: Matthew Fritze Date: Mon, 14 May 2018 14:11:18 -0700 Subject: [PATCH 2/9] Remove old meta data declarations in manifest Change-Id: Ic27b950cc5e640f823074b974f9d29078973fad7 Fixes: 79151692 Test: builds --- AndroidManifest.xml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index d55493cdbd0..f224eca89d1 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -207,8 +207,6 @@ android:value="com.android.settings.category.ia.homepage"/> - - - - - From 07724bdb1813daa1f064c24fa4f7fff3e49f3d38 Mon Sep 17 00:00:00 2001 From: Beverly Date: Mon, 14 May 2018 17:13:43 -0400 Subject: [PATCH 3/9] Gets rid of dividers in sound settings Change-Id: I71a5e37a48cb6366a161ccc6cf456960f1491eec Fixes:79480349 Test: visual inspection (Settings > Sound) --- res/xml/sound_settings.xml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml index 61f529ff33d..5bee7b06edf 100644 --- a/res/xml/sound_settings.xml +++ b/res/xml/sound_settings.xml @@ -44,7 +44,6 @@ android:icon="@drawable/ic_local_phone_24_lib" android:title="@string/call_volume_option_title" android:order="-170" - settings:allowDividerAbove="true" settings:controller="com.android.settings.notification.CallVolumePreferenceController"/> @@ -61,8 +60,7 @@ android:icon="@*android:drawable/ic_audio_ring_notif" android:title="@string/ring_volume_option_title" android:order="-160" - settings:controller="com.android.settings.notification.RingVolumePreferenceController" - settings:allowDividerAbove="true"/> + settings:controller="com.android.settings.notification.RingVolumePreferenceController"/> @@ -102,7 +99,6 @@ android:title="@string/gesture_prevent_ringing_sound_title" android:order="-110" android:fragment="com.android.settings.gestures.PreventRingingGestureSettings" - settings:allowDividerAbove="true" settings:controller="com.android.settings.gestures.PreventRingingPreferenceController" /> From 549a188efe633f10fbc1e88d199c75ba711215e0 Mon Sep 17 00:00:00 2001 From: Rajeev Kumar Date: Mon, 14 May 2018 17:56:27 -0700 Subject: [PATCH 4/9] Make sure we do not make UI calls from background thread in DashboardSummary class. Bug: 79705354 Test: make RunSettingsRoboTests -j40 and manual testing. Change-Id: I08a08e05f3424f4a6d2100aed32d32bb15997c86 --- src/com/android/settings/dashboard/DashboardSummary.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java index af7c90063aa..20033b6bf11 100644 --- a/src/com/android/settings/dashboard/DashboardSummary.java +++ b/src/com/android/settings/dashboard/DashboardSummary.java @@ -276,7 +276,7 @@ public class DashboardSummary extends InstrumentedFragment mSummaryLoader.updateSummaryToCache(category); mStagingCategory = category; if (mSuggestionControllerMixin == null) { - mAdapter.setCategory(mStagingCategory); + ThreadUtils.postOnMainThread(() -> mAdapter.setCategory(mStagingCategory)); return; } if (mSuggestionControllerMixin.isSuggestionLoaded()) { From 1b2b83968ebe9145111eec806c54cbefe6d4f812 Mon Sep 17 00:00:00 2001 From: hughchen Date: Tue, 15 May 2018 14:15:30 +0800 Subject: [PATCH 5/9] Add and update string * Change the string from "cast" to "driving mode" * Add string "Bluetooth, NFC" and "Bluetooth" Bug: 79299421 Test: build pass Change-Id: I6da7e54545f209110fca8e7a107f3b20066c7623 --- res/values/strings.xml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 8347f9956c9..511b7d985ca 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6915,9 +6915,13 @@ Connected devices - Bluetooth, Cast, NFC + Bluetooth, driving mode, NFC - Bluetooth, Cast + Bluetooth, driving mode + + Bluetooth, NFC + + Bluetooth Apps & notifications From 3e76e17c15e7f3bffcc1dd7253feea3e7ac27c84 Mon Sep 17 00:00:00 2001 From: Jeff Gaston Date: Tue, 8 May 2018 14:41:39 -0400 Subject: [PATCH 6/9] Update for support library prebuilt drop Bug: 79267345 Test: m -j checkbuild Change-Id: I086a2253a1c94af6f7c4dca04d2644a4f9e54ef5 --- .../android/settings/search/DeviceIndexUpdateJobService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/settings/search/DeviceIndexUpdateJobService.java b/src/com/android/settings/search/DeviceIndexUpdateJobService.java index 510da3a6226..19b7d5e60b6 100644 --- a/src/com/android/settings/search/DeviceIndexUpdateJobService.java +++ b/src/com/android/settings/search/DeviceIndexUpdateJobService.java @@ -124,7 +124,7 @@ public class DeviceIndexUpdateJobService extends JobService { } protected CharSequence findTitle(Slice loadedSlice, SliceMetadata metaData) { - ListContent content = new ListContent(this, loadedSlice); + ListContent content = new ListContent(null, loadedSlice); SliceItem headerItem = content.getHeaderItem(); if (headerItem == null) { if (content.getRowItems().size() != 0) { From 4eb9e542c1f72e6d1f75418bb686ff7f1da12515 Mon Sep 17 00:00:00 2001 From: richard chou Date: Wed, 9 May 2018 16:21:38 +0800 Subject: [PATCH 7/9] Suppress NewDeviceIntroSuggestionActivity if Tips application exists NewDeviceIntroSuggestionActivity should not show if Tips application exists. Bug: 77652536 Test: atest SettingsRoboTests Change-Id: I0aa19a5bc79c8b1497f42372d293299509d897b2 Merged-In: I85575e8eb92a8a620f0af9e5ad3ebd5b8dd05323 --- .../NewDeviceIntroSuggestionActivity.java | 23 ++++++++++- .../NewDeviceIntroSuggestionActivityTest.java | 38 +++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/support/NewDeviceIntroSuggestionActivity.java b/src/com/android/settings/support/NewDeviceIntroSuggestionActivity.java index f881e2ff8c8..cddbb57dd5e 100644 --- a/src/com/android/settings/support/NewDeviceIntroSuggestionActivity.java +++ b/src/com/android/settings/support/NewDeviceIntroSuggestionActivity.java @@ -20,9 +20,12 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.annotation.VisibleForTesting; import android.text.TextUtils; import android.text.format.DateUtils; @@ -47,6 +50,8 @@ public class NewDeviceIntroSuggestionActivity extends Activity { @VisibleForTesting static final long PERMANENT_DISMISS_THRESHOLD = DateUtils.DAY_IN_MILLIS * 14; + public static final String TIPS_PACKAGE_NAME = "com.google.android.apps.tips"; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -62,7 +67,9 @@ public class NewDeviceIntroSuggestionActivity extends Activity { } public static boolean isSuggestionComplete(Context context) { - return !isSupported(context) + // Always returns 'true' if Tips application exists. Check b/77652536 for more details. + return isTipsInstalledAsSystemApp(context) + || !isSupported(context) || isExpired(context) || hasLaunchedBefore(context) || !canOpenUrlInBrowser(context); @@ -130,4 +137,18 @@ public class NewDeviceIntroSuggestionActivity extends Activity { .addCategory(Intent.CATEGORY_BROWSABLE) .setData(Uri.parse(url)); } + + /** + * Check if the specified package exists and is marked with FLAG_SYSTEM + */ + private static boolean isTipsInstalledAsSystemApp(@NonNull Context context) { + try { + final PackageInfo info = context.getPackageManager().getPackageInfo(TIPS_PACKAGE_NAME, + PackageManager.MATCH_SYSTEM_ONLY); + return info != null; + } catch (PackageManager.NameNotFoundException e) { + Log.w(TAG, "Cannot find the package: " + TIPS_PACKAGE_NAME, e); + return false; + } + } } diff --git a/tests/robotests/src/com/android/settings/support/NewDeviceIntroSuggestionActivityTest.java b/tests/robotests/src/com/android/settings/support/NewDeviceIntroSuggestionActivityTest.java index 286676dd0d0..8b03376afe3 100644 --- a/tests/robotests/src/com/android/settings/support/NewDeviceIntroSuggestionActivityTest.java +++ b/tests/robotests/src/com/android/settings/support/NewDeviceIntroSuggestionActivityTest.java @@ -19,7 +19,10 @@ package com.android.settings.support; import static com.android.settings.support.NewDeviceIntroSuggestionActivity.PERMANENT_DISMISS_THRESHOLD; import static com.android.settings.support.NewDeviceIntroSuggestionActivity.PREF_KEY_SUGGGESTION_COMPLETE; import static com.android.settings.support.NewDeviceIntroSuggestionActivity.PREF_KEY_SUGGGESTION_FIRST_DISPLAY_TIME; + +import static com.android.settings.support.NewDeviceIntroSuggestionActivity.TIPS_PACKAGE_NAME; import static com.android.settings.support.NewDeviceIntroSuggestionActivity.isSuggestionComplete; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Mockito.when; @@ -27,6 +30,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageInfo; import android.content.pm.ResolveInfo; import com.android.settings.R; @@ -64,6 +68,40 @@ public class NewDeviceIntroSuggestionActivityTest { .thenReturn(getSharedPreferences()); } + @Test + public void isSuggestionComplete_TipsNotExistsAndNotExpiredAndCanOpenUrl_shouldReturnFalse() { + mShadowPackageManager.removePackage(TIPS_PACKAGE_NAME); + + when(mMockContext.getResources() + .getBoolean(R.bool.config_new_device_intro_suggestion_supported)) + .thenReturn(true); + + when(mFeatureFactory.supportFeatureProvider.getNewDeviceIntroUrl(any(Context.class))) + .thenReturn("https://com.android.settings"); + final Intent intent = NewDeviceIntroSuggestionActivity.getLaunchIntent(mContext); + mShadowPackageManager.addResolveInfoForIntent(intent, new ResolveInfo()); + + assertThat(isSuggestionComplete(mContext)).isFalse(); + } + + @Test + public void isSuggestionComplete_TipsExistsAndNotExpiredAndCanOpenUrl_shouldReturnTrue() { + final PackageInfo mockInfo = new PackageInfo(); + mockInfo.packageName = TIPS_PACKAGE_NAME; + mShadowPackageManager.addPackage(mockInfo); + + when(mMockContext.getResources() + .getBoolean(R.bool.config_new_device_intro_suggestion_supported)) + .thenReturn(true); + + when(mFeatureFactory.supportFeatureProvider.getNewDeviceIntroUrl(any(Context.class))) + .thenReturn("https://com.android.settings"); + final Intent intent = NewDeviceIntroSuggestionActivity.getLaunchIntent(mContext); + mShadowPackageManager.addResolveInfoForIntent(intent, new ResolveInfo()); + + assertThat(isSuggestionComplete(mContext)).isTrue(); + } + @Test public void isSuggestionComplete_notSupported_shouldReturnTrue() { when(mMockContext.getResources() From 90ebab065008a109b5470bed1deb2dc330b18d43 Mon Sep 17 00:00:00 2001 From: Beverly Date: Mon, 14 May 2018 17:37:25 -0400 Subject: [PATCH 8/9] DO NOT MERGE Show mute icon in sound settings page - Show mute icon when ringer is muted - Show vibrate icon when ringer is on vibrate - Show ringer icon when ringer is on ring Test: visual inspection Change-Id: I662e0d4fd33ac2284378c2f558509c93c907fbe3 Bug: 78330194 --- .../RingVolumePreferenceController.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/com/android/settings/notification/RingVolumePreferenceController.java b/src/com/android/settings/notification/RingVolumePreferenceController.java index e328cd23e30..53fd3855ca8 100644 --- a/src/com/android/settings/notification/RingVolumePreferenceController.java +++ b/src/com/android/settings/notification/RingVolumePreferenceController.java @@ -17,7 +17,6 @@ package com.android.settings.notification; import android.app.NotificationManager; -import android.arch.lifecycle.LifecycleObserver; import android.arch.lifecycle.OnLifecycleEvent; import android.content.BroadcastReceiver; import android.content.ComponentName; @@ -47,6 +46,8 @@ public class RingVolumePreferenceController extends VolumeSeekBarPreferenceContr private final RingReceiver mReceiver = new RingReceiver(); private final H mHandler = new H(); + private int mMuteIcon; + public RingVolumePreferenceController(Context context) { this(context, KEY_RING_VOLUME); } @@ -94,7 +95,7 @@ public class RingVolumePreferenceController extends VolumeSeekBarPreferenceContr @Override public int getMuteIcon() { - return R.drawable.ic_volume_ringer_vibrate; + return mMuteIcon; } private void updateRingerMode() { @@ -104,11 +105,6 @@ public class RingVolumePreferenceController extends VolumeSeekBarPreferenceContr updatePreferenceIcon(); } - private boolean wasRingerModeVibrate() { - return mVibrator != null && mRingerMode == AudioManager.RINGER_MODE_SILENT - && mHelper.getLastAudibleStreamVolume(getAudioStream()) == 0; - } - private void updateEffectsSuppressor() { final ComponentName suppressor = NotificationManager.from(mContext).getEffectsSuppressor(); if (Objects.equals(suppressor, mSuppressor)) return; @@ -122,10 +118,15 @@ public class RingVolumePreferenceController extends VolumeSeekBarPreferenceContr private void updatePreferenceIcon() { if (mPreference != null) { - mPreference.showIcon( - mRingerMode == AudioManager.RINGER_MODE_VIBRATE || wasRingerModeVibrate() - ? com.android.internal.R.drawable.ic_audio_ring_notif_vibrate - : com.android.internal.R.drawable.ic_audio_ring_notif); + if (mRingerMode == AudioManager.RINGER_MODE_VIBRATE) { + mMuteIcon = R.drawable.ic_volume_ringer_vibrate; + mPreference.showIcon(com.android.internal.R.drawable.ic_audio_ring_notif_vibrate); + } else if (mRingerMode == AudioManager.RINGER_MODE_SILENT) { + mMuteIcon = R.drawable.ic_volume_ringer_mute; + mPreference.showIcon(com.android.internal.R.drawable.ic_audio_ring_notif_mute); + } else { + mPreference.showIcon(com.android.internal.R.drawable.ic_audio_ring_notif); + } } } From 37a6a9144409d4cd89415241d86ac75c31de3d8c Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Tue, 15 May 2018 12:48:59 -0700 Subject: [PATCH 9/9] Update sound setting icons - icon for sound setting in Settings homepage - icon on phone muted condition card - icon on DND condition card and DND suggestion Bug: 77982107 Test: visual Change-Id: I22b5223029d67de0bcb2466a45075835453a2b5f --- AndroidManifest.xml | 2 +- res/drawable/ic_do_not_disturb_on_24dp.xml | 28 ++++++++++++++ res/drawable/ic_homepage_sound.xml | 2 +- res/drawable/ic_notifications_off_24dp.xml | 31 +++++++++++++++ res/drawable/ic_volume_ringer_mute.xml | 38 ------------------- ..._sound_white.xml => ic_volume_up_24dp.xml} | 18 +++++---- res/drawable/ic_zen.xml | 26 ------------- .../dashboard/conditional/DndCondition.java | 2 +- .../conditional/RingerMutedCondition.java | 2 +- .../RingVolumePreferenceController.java | 2 +- 10 files changed, 74 insertions(+), 77 deletions(-) create mode 100644 res/drawable/ic_do_not_disturb_on_24dp.xml create mode 100644 res/drawable/ic_notifications_off_24dp.xml delete mode 100644 res/drawable/ic_volume_ringer_mute.xml rename res/drawable/{ic_settings_sound_white.xml => ic_volume_up_24dp.xml} (61%) delete mode 100644 res/drawable/ic_zen.xml diff --git a/AndroidManifest.xml b/AndroidManifest.xml index f224eca89d1..5dd22c2833d 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -741,7 +741,7 @@ diff --git a/res/drawable/ic_do_not_disturb_on_24dp.xml b/res/drawable/ic_do_not_disturb_on_24dp.xml new file mode 100644 index 00000000000..cace8d4433f --- /dev/null +++ b/res/drawable/ic_do_not_disturb_on_24dp.xml @@ -0,0 +1,28 @@ + + + + + diff --git a/res/drawable/ic_homepage_sound.xml b/res/drawable/ic_homepage_sound.xml index 4991656f3bc..a7369ad257c 100644 --- a/res/drawable/ic_homepage_sound.xml +++ b/res/drawable/ic_homepage_sound.xml @@ -32,5 +32,5 @@ android:height="@dimen/dashboard_tile_foreground_image_size" android:start="@dimen/dashboard_tile_foreground_image_inset" android:top="@dimen/dashboard_tile_foreground_image_inset" - android:drawable="@drawable/ic_settings_sound_white" /> + android:drawable="@drawable/ic_volume_up_24dp" /> diff --git a/res/drawable/ic_notifications_off_24dp.xml b/res/drawable/ic_notifications_off_24dp.xml new file mode 100644 index 00000000000..16220253313 --- /dev/null +++ b/res/drawable/ic_notifications_off_24dp.xml @@ -0,0 +1,31 @@ + + + + + + + diff --git a/res/drawable/ic_volume_ringer_mute.xml b/res/drawable/ic_volume_ringer_mute.xml deleted file mode 100644 index 03357e990e6..00000000000 --- a/res/drawable/ic_volume_ringer_mute.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - diff --git a/res/drawable/ic_settings_sound_white.xml b/res/drawable/ic_volume_up_24dp.xml similarity index 61% rename from res/drawable/ic_settings_sound_white.xml rename to res/drawable/ic_volume_up_24dp.xml index 47373498c48..8c68c0070f9 100644 --- a/res/drawable/ic_settings_sound_white.xml +++ b/res/drawable/ic_volume_up_24dp.xml @@ -13,17 +13,19 @@ See the License for the specific language governing permissions and limitations under the License. --> + + android:pathData="M3,9v6h4l5,5V4L7,9H3zM10,8.83v6.34L7.83,13H5v-2h2.83L10,8.83z"/> + + diff --git a/res/drawable/ic_zen.xml b/res/drawable/ic_zen.xml deleted file mode 100644 index 2c55e026be5..00000000000 --- a/res/drawable/ic_zen.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - diff --git a/src/com/android/settings/dashboard/conditional/DndCondition.java b/src/com/android/settings/dashboard/conditional/DndCondition.java index 4acd332b379..405ed811781 100644 --- a/src/com/android/settings/dashboard/conditional/DndCondition.java +++ b/src/com/android/settings/dashboard/conditional/DndCondition.java @@ -83,7 +83,7 @@ public class DndCondition extends Condition { @Override public Drawable getIcon() { - return mManager.getContext().getDrawable(R.drawable.ic_zen); + return mManager.getContext().getDrawable(R.drawable.ic_do_not_disturb_on_24dp); } @Override diff --git a/src/com/android/settings/dashboard/conditional/RingerMutedCondition.java b/src/com/android/settings/dashboard/conditional/RingerMutedCondition.java index bf5bc3618d4..7f7bc2be090 100644 --- a/src/com/android/settings/dashboard/conditional/RingerMutedCondition.java +++ b/src/com/android/settings/dashboard/conditional/RingerMutedCondition.java @@ -55,7 +55,7 @@ public class RingerMutedCondition extends AbnormalRingerConditionBase { @Override public Drawable getIcon() { - return mManager.getContext().getDrawable(R.drawable.ic_volume_ringer_mute); + return mManager.getContext().getDrawable(R.drawable.ic_notifications_off_24dp); } @Override diff --git a/src/com/android/settings/notification/RingVolumePreferenceController.java b/src/com/android/settings/notification/RingVolumePreferenceController.java index 53fd3855ca8..c4c71c408ff 100644 --- a/src/com/android/settings/notification/RingVolumePreferenceController.java +++ b/src/com/android/settings/notification/RingVolumePreferenceController.java @@ -122,7 +122,7 @@ public class RingVolumePreferenceController extends VolumeSeekBarPreferenceContr mMuteIcon = R.drawable.ic_volume_ringer_vibrate; mPreference.showIcon(com.android.internal.R.drawable.ic_audio_ring_notif_vibrate); } else if (mRingerMode == AudioManager.RINGER_MODE_SILENT) { - mMuteIcon = R.drawable.ic_volume_ringer_mute; + mMuteIcon = R.drawable.ic_notifications_off_24dp; mPreference.showIcon(com.android.internal.R.drawable.ic_audio_ring_notif_mute); } else { mPreference.showIcon(com.android.internal.R.drawable.ic_audio_ring_notif);