Merge "Suppress NewDeviceIntroSuggestionActivity if Tips application exists" into pi-dev
am: 034e39679d
Change-Id: I79ba64918f591c28067b10a09c3844824f7a9278
This commit is contained in:
@@ -20,9 +20,12 @@ import android.app.Activity;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.pm.PackageInfo;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.VisibleForTesting;
|
import android.support.annotation.VisibleForTesting;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.text.format.DateUtils;
|
import android.text.format.DateUtils;
|
||||||
@@ -47,6 +50,8 @@ public class NewDeviceIntroSuggestionActivity extends Activity {
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static final long PERMANENT_DISMISS_THRESHOLD = DateUtils.DAY_IN_MILLIS * 14;
|
static final long PERMANENT_DISMISS_THRESHOLD = DateUtils.DAY_IN_MILLIS * 14;
|
||||||
|
|
||||||
|
public static final String TIPS_PACKAGE_NAME = "com.google.android.apps.tips";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@@ -62,7 +67,9 @@ public class NewDeviceIntroSuggestionActivity extends Activity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isSuggestionComplete(Context context) {
|
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)
|
|| isExpired(context)
|
||||||
|| hasLaunchedBefore(context)
|
|| hasLaunchedBefore(context)
|
||||||
|| !canOpenUrlInBrowser(context);
|
|| !canOpenUrlInBrowser(context);
|
||||||
@@ -130,4 +137,18 @@ public class NewDeviceIntroSuggestionActivity extends Activity {
|
|||||||
.addCategory(Intent.CATEGORY_BROWSABLE)
|
.addCategory(Intent.CATEGORY_BROWSABLE)
|
||||||
.setData(Uri.parse(url));
|
.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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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.PERMANENT_DISMISS_THRESHOLD;
|
||||||
import static com.android.settings.support.NewDeviceIntroSuggestionActivity.PREF_KEY_SUGGGESTION_COMPLETE;
|
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.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.android.settings.support.NewDeviceIntroSuggestionActivity.isSuggestionComplete;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static org.mockito.Matchers.any;
|
import static org.mockito.Matchers.any;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
@@ -27,6 +30,7 @@ import static org.mockito.Mockito.when;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
@@ -64,6 +68,40 @@ public class NewDeviceIntroSuggestionActivityTest {
|
|||||||
.thenReturn(getSharedPreferences());
|
.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
|
@Test
|
||||||
public void isSuggestionComplete_notSupported_shouldReturnTrue() {
|
public void isSuggestionComplete_notSupported_shouldReturnTrue() {
|
||||||
when(mMockContext.getResources()
|
when(mMockContext.getResources()
|
||||||
|
Reference in New Issue
Block a user