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

Commit 5229b7c5 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Suppress NewDeviceIntroSuggestionActivity if Tips application exists"

parents 55e85694 8d72af57
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()