From 4eb9e542c1f72e6d1f75418bb686ff7f1da12515 Mon Sep 17 00:00:00 2001 From: richard chou Date: Wed, 9 May 2018 16:21:38 +0800 Subject: [PATCH] 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()