OSDN Git Service

Suppress NewDeviceIntroSuggestionActivity if Tips application exists
authorrichard chou <richardchou@google.com>
Tue, 15 May 2018 07:18:53 +0000 (15:18 +0800)
committerrichard chou <richardchou@google.com>
Tue, 15 May 2018 07:18:53 +0000 (15:18 +0800)
NewDeviceIntroSuggestionActivity should not show if Tips application exists.

Bug: 77652536
Test: atest RunSettingsRoboTests
Change-Id: I85575e8eb92a8a620f0af9e5ad3ebd5b8dd05323

src/com/android/settings/support/NewDeviceIntroSuggestionActivity.java
tests/robotests/src/com/android/settings/support/NewDeviceIntroSuggestionActivityTest.java

index 771ec9c..1ec566e 100644 (file)
@@ -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 androidx.annotation.NonNull;
 import androidx.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 <i>FLAG_SYSTEM</i>
+     */
+    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;
+        }
+    }
 }
index 286676d..34f8d8a 100644 (file)
@@ -19,6 +19,7 @@ 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;
@@ -27,6 +28,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;
@@ -65,6 +67,40 @@ public class NewDeviceIntroSuggestionActivityTest {
     }
 
     @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()
                 .getBoolean(R.bool.config_new_device_intro_suggestion_supported))