Instant apps show supported links not open default
On the app info page, instant apps show only the supported links dialog rather than Open by default which opens in a secondary page where the user can control things that aren't relevant to instant apps. Test: make RunSettingsRoboTests Bug: 36497697 Change-Id: If4eba7c11c5490cbda1ef617002121fe108c4085
This commit is contained in:
@@ -52,6 +52,11 @@
|
||||
android:summary="@string/summary_placeholder"
|
||||
android:selectable="true"/>
|
||||
|
||||
<com.android.settings.applications.AppDomainsPreference
|
||||
android:key="instant_app_launch_supported_domain_urls"
|
||||
android:title="@string/app_launch_supported_domain_urls_title"
|
||||
android:selectable="true" />
|
||||
|
||||
<Preference
|
||||
android:key="data_settings"
|
||||
android:title="@string/data_usage_summary_title"
|
||||
|
@@ -112,6 +112,7 @@ import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
||||
|
||||
@@ -158,6 +159,8 @@ public class InstalledAppDetails extends AppInfoBase
|
||||
private static final String KEY_BATTERY = "battery";
|
||||
private static final String KEY_MEMORY = "memory";
|
||||
private static final String KEY_VERSION = "app_version";
|
||||
private static final String KEY_INSTANT_APP_SUPPORTED_LINKS =
|
||||
"instant_app_launch_supported_domain_urls";
|
||||
|
||||
private final HashSet<String> mHomePackages = new HashSet<>();
|
||||
|
||||
@@ -175,6 +178,7 @@ public class InstalledAppDetails extends AppInfoBase
|
||||
private Preference mDataPreference;
|
||||
private Preference mMemoryPreference;
|
||||
private Preference mVersionPreference;
|
||||
private AppDomainsPreference mInstantAppDomainsPreference;
|
||||
|
||||
private boolean mDisableAfterUninstall;
|
||||
|
||||
@@ -432,7 +436,8 @@ public class InstalledAppDetails extends AppInfoBase
|
||||
mMemoryPreference = findPreference(KEY_MEMORY);
|
||||
mMemoryPreference.setOnPreferenceClickListener(this);
|
||||
mVersionPreference = findPreference(KEY_VERSION);
|
||||
|
||||
mInstantAppDomainsPreference =
|
||||
(AppDomainsPreference) findPreference(KEY_INSTANT_APP_SUPPORTED_LINKS);
|
||||
mLaunchPreference = findPreference(KEY_LAUNCH);
|
||||
if (mAppEntry != null && mAppEntry.info != null) {
|
||||
if ((mAppEntry.info.flags&ApplicationInfo.FLAG_INSTALLED) == 0 ||
|
||||
@@ -550,6 +555,25 @@ public class InstalledAppDetails extends AppInfoBase
|
||||
public void onLoaderReset(Loader<AppStorageStats> loader) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility method to hide and show specific preferences based on whether the app being displayed
|
||||
* is an Instant App or an installed app.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
void prepareInstantAppPrefs() {
|
||||
final boolean isInstant = AppUtils.isInstant(mPackageInfo.applicationInfo);
|
||||
if (isInstant) {
|
||||
Set<String> handledDomainSet = Utils.getHandledDomains(mPm, mPackageInfo.packageName);
|
||||
String[] handledDomains = handledDomainSet.toArray(new String[handledDomainSet.size()]);
|
||||
mInstantAppDomainsPreference.setTitles(handledDomains);
|
||||
// Dummy values, unused in the implementation
|
||||
mInstantAppDomainsPreference.setValues(new int[handledDomains.length]);
|
||||
getPreferenceScreen().removePreference(mLaunchPreference);
|
||||
} else {
|
||||
getPreferenceScreen().removePreference(mInstantAppDomainsPreference);
|
||||
}
|
||||
}
|
||||
|
||||
// Utility method to set application label and icon.
|
||||
private void setAppLabelAndIcon(PackageInfo pkgInfo) {
|
||||
final View appSnippet = mHeader.findViewById(R.id.app_snippet);
|
||||
@@ -641,6 +665,7 @@ public class InstalledAppDetails extends AppInfoBase
|
||||
checkForceStop();
|
||||
setAppLabelAndIcon(mPackageInfo);
|
||||
initUninstallButtons();
|
||||
prepareInstantAppPrefs();
|
||||
|
||||
// Update the preference summaries.
|
||||
Activity context = getActivity();
|
||||
|
@@ -17,21 +17,34 @@
|
||||
package com.android.settings.applications;
|
||||
|
||||
|
||||
import android.app.Activity;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.content.Context;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.BatteryStats;
|
||||
import android.os.UserManager;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.support.v7.preference.PreferenceManager;
|
||||
import android.support.v7.preference.PreferenceScreen;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
|
||||
import com.android.internal.os.BatterySipper;
|
||||
import com.android.internal.os.BatteryStatsHelper;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.SettingsActivity;
|
||||
import com.android.settings.SettingsRobolectricTestRunner;
|
||||
import com.android.settings.TestConfig;
|
||||
@@ -39,8 +52,8 @@ import com.android.settings.applications.instantapps.InstantAppButtonsController
|
||||
import com.android.settings.testutils.FakeFeatureFactory;
|
||||
import com.android.settingslib.applications.AppUtils;
|
||||
import com.android.settingslib.applications.ApplicationsState.AppEntry;
|
||||
import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
|
||||
import com.android.settingslib.applications.StorageStatsSource.AppStorageStats;
|
||||
import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -52,18 +65,6 @@ import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.util.ReflectionHelpers;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyInt;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
|
||||
@RunWith(SettingsRobolectricTestRunner.class)
|
||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
||||
@@ -315,4 +316,43 @@ public final class InstalledAppDetailsTest {
|
||||
verify(buttonsController).setPackageName(anyString());
|
||||
verify(buttonsController).show();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void instantApps_removeCorrectPref() {
|
||||
PreferenceScreen mockPreferenceScreen = mock(PreferenceScreen.class);
|
||||
PreferenceManager mockPreferenceManager = mock(PreferenceManager.class);
|
||||
AppDomainsPreference mockAppDomainsPref = mock(AppDomainsPreference.class);
|
||||
Preference mockLaunchPreference = mock(Preference.class);
|
||||
PackageInfo mockPackageInfo = mock(PackageInfo.class);
|
||||
PackageManager mockPackageManager = mock(PackageManager.class);
|
||||
ReflectionHelpers.setField(
|
||||
mAppDetail, "mLaunchPreference", mockLaunchPreference);
|
||||
ReflectionHelpers.setField(
|
||||
mAppDetail, "mInstantAppDomainsPreference", mockAppDomainsPref);
|
||||
ReflectionHelpers.setField(
|
||||
mAppDetail, "mPreferenceManager", mockPreferenceManager);
|
||||
ReflectionHelpers.setField(
|
||||
mAppDetail, "mPackageInfo", mockPackageInfo);
|
||||
ReflectionHelpers.setField(
|
||||
mAppDetail, "mPm", mockPackageManager);
|
||||
when(mockPreferenceManager.getPreferenceScreen()).thenReturn(mockPreferenceScreen);
|
||||
|
||||
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
|
||||
(InstantAppDataProvider) (i -> false));
|
||||
mAppDetail.prepareInstantAppPrefs();
|
||||
|
||||
// For the non instant case we remove the app domain pref, and leave the launch pref
|
||||
verify(mockPreferenceScreen).removePreference(mockAppDomainsPref);
|
||||
verify(mockPreferenceScreen, never()).removePreference(mockLaunchPreference);
|
||||
|
||||
// For the instant app case we remove the launch preff, and leave the app domain pref
|
||||
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
|
||||
(InstantAppDataProvider) (i -> true));
|
||||
|
||||
mAppDetail.prepareInstantAppPrefs();
|
||||
verify(mockPreferenceScreen).removePreference(mockLaunchPreference);
|
||||
// Will be 1 still due to above call
|
||||
verify(mockPreferenceScreen, times(1))
|
||||
.removePreference(mockAppDomainsPref);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user