Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8d72af57 authored by richard chou's avatar richard chou
Browse files

Suppress NewDeviceIntroSuggestionActivity if Tips application exists

NewDeviceIntroSuggestionActivity should not show if Tips application exists.

Bug: 77652536
Test: atest RunSettingsRoboTests
Change-Id: I85575e8eb92a8a620f0af9e5ad3ebd5b8dd05323
parent ae9a1d15
Loading
Loading
Loading
Loading
+22 −1
Original line number Diff line number Diff line
@@ -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;
        }
    }
}
+36 −0
Original line number Diff line number Diff line
@@ -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;
@@ -64,6 +66,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()