Create version 2 of InstalledAppDetails
- this is the first step for converting InstalledAppDetails into DashboardFragment - add a feature flag to determine whether to show the new installed app detail page. - decouple the fragment from AppInfoBase: extends from SettingsPreferenceFragment directly and copy all codes from AppInfoBase. Bug: 69384089 Test: make RunSettingsRoboTests Change-Id: If1ab5b216620eaba1d6bde20e65e7a602931fd94
This commit is contained in:
1685
src/com/android/settings/applications/AppInfoDashboardFragment.java
Executable file
1685
src/com/android/settings/applications/AppInfoDashboardFragment.java
Executable file
File diff suppressed because it is too large
Load Diff
@@ -121,7 +121,10 @@ import java.util.Set;
|
||||
* System applications that do not want clear user data do not have this option.
|
||||
* For non-system applications, there is no option to clear data. Instead there is an option to
|
||||
* uninstall the application.
|
||||
*
|
||||
* deprecated in favor of {@link AppInfoDashboardFragment}
|
||||
*/
|
||||
@Deprecated
|
||||
public class InstalledAppDetails extends AppInfoBase
|
||||
implements OnPreferenceClickListener, LoaderManager.LoaderCallbacks<AppStorageStats> {
|
||||
|
||||
|
@@ -17,21 +17,29 @@
|
||||
package com.android.settings.applications;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.util.FeatureFlagUtils;
|
||||
|
||||
import com.android.settings.SettingsActivity;
|
||||
import com.android.settings.core.FeatureFlags;
|
||||
|
||||
public class InstalledAppDetailsTop extends SettingsActivity {
|
||||
|
||||
@Override
|
||||
public Intent getIntent() {
|
||||
Intent modIntent = new Intent(super.getIntent());
|
||||
if (FeatureFlagUtils.isEnabled(this, FeatureFlags.APP_INFO_V2)) {
|
||||
modIntent.putExtra(EXTRA_SHOW_FRAGMENT, AppInfoDashboardFragment.class.getName());
|
||||
} else {
|
||||
modIntent.putExtra(EXTRA_SHOW_FRAGMENT, InstalledAppDetails.class.getName());
|
||||
}
|
||||
return modIntent;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isValidFragment(String fragmentName) {
|
||||
if (InstalledAppDetails.class.getName().equals(fragmentName)) return true;
|
||||
return false;
|
||||
if (FeatureFlagUtils.isEnabled(this, FeatureFlags.APP_INFO_V2)) {
|
||||
return AppInfoDashboardFragment.class.getName().equals(fragmentName);
|
||||
}
|
||||
return InstalledAppDetails.class.getName().equals(fragmentName);
|
||||
}
|
||||
}
|
||||
|
@@ -34,11 +34,13 @@ import android.support.v7.preference.PreferenceScreen;
|
||||
import android.text.TextUtils;
|
||||
import android.util.ArrayMap;
|
||||
import android.util.ArraySet;
|
||||
import android.util.FeatureFlagUtils;
|
||||
import android.util.IconDrawableFactory;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.core.FeatureFlags;
|
||||
import com.android.settings.core.PreferenceControllerMixin;
|
||||
import com.android.settings.widget.AppPreference;
|
||||
import com.android.settingslib.applications.ApplicationsState;
|
||||
@@ -241,10 +243,17 @@ public class RecentAppsPreferenceController extends AbstractPreferenceController
|
||||
System.currentTimeMillis() - stat.getLastTimeUsed(), false));
|
||||
pref.setOrder(i);
|
||||
pref.setOnPreferenceClickListener(preference -> {
|
||||
if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.APP_INFO_V2)) {
|
||||
AppInfoBase.startAppInfoFragment(AppInfoDashboardFragment.class,
|
||||
R.string.application_info_label, pkgName, appEntry.info.uid, mHost,
|
||||
1001 /*RequestCode*/, SETTINGS_APP_NOTIF_CATEGORY);
|
||||
return true;
|
||||
} else {
|
||||
AppInfoBase.startAppInfoFragment(InstalledAppDetails.class,
|
||||
R.string.application_info_label, pkgName, appEntry.info.uid, mHost,
|
||||
1001 /*RequestCode*/, SETTINGS_APP_NOTIF_CATEGORY);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
if (!rebindPref) {
|
||||
mCategory.addPreference(pref);
|
||||
|
@@ -50,6 +50,7 @@ import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.TextUtils;
|
||||
import android.util.ArraySet;
|
||||
import android.util.FeatureFlagUtils;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
@@ -95,6 +96,8 @@ import com.android.settings.applications.InstalledAppDetails;
|
||||
import com.android.settings.applications.NotificationApps;
|
||||
import com.android.settings.applications.UsageAccessDetails;
|
||||
import com.android.settings.applications.WriteSettingsDetails;
|
||||
import com.android.settings.applications.AppInfoDashboardFragment;
|
||||
import com.android.settings.core.FeatureFlags;
|
||||
import com.android.settings.core.InstrumentedPreferenceFragment;
|
||||
import com.android.settings.dashboard.SummaryLoader;
|
||||
import com.android.settings.fuelgauge.HighPowerDetail;
|
||||
@@ -538,7 +541,13 @@ public class ManageApplications extends InstrumentedPreferenceFragment
|
||||
// process ahead of time, to avoid a long load of data when user clicks on a managed
|
||||
// app. Maybe when they load the list of apps that contains managed profile apps.
|
||||
default:
|
||||
startAppInfoFragment(InstalledAppDetails.class, R.string.application_info_label);
|
||||
if (FeatureFlagUtils.isEnabled(getContext(), FeatureFlags.APP_INFO_V2)) {
|
||||
startAppInfoFragment(
|
||||
AppInfoDashboardFragment.class, R.string.application_info_label);
|
||||
} else {
|
||||
startAppInfoFragment(
|
||||
InstalledAppDetails.class, R.string.application_info_label);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@@ -24,4 +24,5 @@ public class FeatureFlags {
|
||||
public static final String DEV_OPTION_V1 = "dev_option_v1";
|
||||
public static final String SEARCH_V2 = "settings_search_v2";
|
||||
public static final String SUGGESTIONS_V2 = "new_settings_suggestion";
|
||||
public static final String APP_INFO_V2 = "settings_app_info_v2";
|
||||
}
|
||||
|
@@ -52,6 +52,7 @@ import com.android.settings.applications.ProcessStatsUi;
|
||||
import com.android.settings.applications.UsageAccessDetails;
|
||||
import com.android.settings.applications.VrListenerSettings;
|
||||
import com.android.settings.applications.WriteSettingsDetails;
|
||||
import com.android.settings.applications.AppInfoDashboardFragment;
|
||||
import com.android.settings.applications.assist.ManageAssist;
|
||||
import com.android.settings.applications.manageapplications.ManageApplications;
|
||||
import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment;
|
||||
@@ -208,6 +209,7 @@ public class SettingsGateway {
|
||||
ChooseLockPassword.ChooseLockPasswordFragment.class.getName(),
|
||||
ChooseLockPattern.ChooseLockPatternFragment.class.getName(),
|
||||
InstalledAppDetails.class.getName(),
|
||||
AppInfoDashboardFragment.class.getName(),
|
||||
BatterySaverSettings.class.getName(),
|
||||
AppNotificationSettings.class.getName(),
|
||||
ChannelNotificationSettings.class.getName(),
|
||||
|
@@ -20,6 +20,7 @@ import android.os.Bundle;
|
||||
import android.os.UserHandle;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.support.v7.preference.PreferenceViewHolder;
|
||||
import android.util.FeatureFlagUtils;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
@@ -31,6 +32,8 @@ import com.android.settings.R;
|
||||
import com.android.settings.SettingsPreferenceFragment;
|
||||
import com.android.settings.applications.AppStateBaseBridge;
|
||||
import com.android.settings.applications.InstalledAppDetails;
|
||||
import com.android.settings.applications.AppInfoDashboardFragment;
|
||||
import com.android.settings.core.FeatureFlags;
|
||||
import com.android.settings.datausage.AppStateDataUsageBridge.DataUsageState;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settings.widget.AppSwitchPreference;
|
||||
@@ -271,10 +274,17 @@ public class UnrestrictedDataAccess extends SettingsPreferenceFragment
|
||||
protected void onClick() {
|
||||
if (mState.isDataSaverBlacklisted) {
|
||||
// app is blacklisted, launch App Data Usage screen
|
||||
if (FeatureFlagUtils.isEnabled(getContext(), FeatureFlags.APP_INFO_V2)) {
|
||||
AppInfoDashboardFragment.startAppInfoFragment(AppDataUsage.class,
|
||||
R.string.app_data_usage,
|
||||
UnrestrictedDataAccess.this,
|
||||
mEntry);
|
||||
} else {
|
||||
InstalledAppDetails.startAppInfoFragment(AppDataUsage.class,
|
||||
R.string.app_data_usage,
|
||||
UnrestrictedDataAccess.this,
|
||||
mEntry);
|
||||
}
|
||||
} else {
|
||||
// app is not blacklisted, let superclass handle toggle switch
|
||||
super.onClick();
|
||||
|
@@ -20,10 +20,13 @@ import android.support.annotation.VisibleForTesting;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.support.v7.preference.PreferenceCategory;
|
||||
import android.support.v7.preference.PreferenceScreen;
|
||||
import android.util.FeatureFlagUtils;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.SettingsActivity;
|
||||
import com.android.settings.applications.InstalledAppDetails;
|
||||
import com.android.settings.applications.AppInfoDashboardFragment;
|
||||
import com.android.settings.core.FeatureFlags;
|
||||
import com.android.settings.widget.AppPreference;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
import com.android.settingslib.location.RecentLocationApps;
|
||||
@@ -56,11 +59,19 @@ public class RecentLocationRequestPreferenceController extends LocationBasePrefe
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
// start new fragment to display extended information
|
||||
final Bundle args = new Bundle();
|
||||
if (FeatureFlagUtils.isEnabled(mFragment.getActivity(), FeatureFlags.APP_INFO_V2)) {
|
||||
args.putString(AppInfoDashboardFragment.ARG_PACKAGE_NAME, mPackage);
|
||||
((SettingsActivity) mFragment.getActivity()).startPreferencePanelAsUser(
|
||||
mFragment,
|
||||
AppInfoDashboardFragment.class.getName(), args,
|
||||
R.string.application_info_label, null, mUserHandle);
|
||||
} else {
|
||||
args.putString(InstalledAppDetails.ARG_PACKAGE_NAME, mPackage);
|
||||
((SettingsActivity) mFragment.getActivity()).startPreferencePanelAsUser(
|
||||
mFragment,
|
||||
InstalledAppDetails.class.getName(), args,
|
||||
R.string.application_info_label, null, mUserHandle);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@@ -32,6 +32,7 @@ import android.support.annotation.IntDef;
|
||||
import android.support.annotation.VisibleForTesting;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.TextUtils;
|
||||
import android.util.FeatureFlagUtils;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
@@ -44,6 +45,8 @@ import com.android.settings.Utils;
|
||||
import com.android.settings.applications.AppInfoBase;
|
||||
import com.android.settings.applications.InstalledAppDetails;
|
||||
import com.android.settings.applications.LayoutPreference;
|
||||
import com.android.settings.applications.AppInfoDashboardFragment;
|
||||
import com.android.settings.core.FeatureFlags;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settingslib.applications.ApplicationsState;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
@@ -272,11 +275,17 @@ public class EntityHeaderController {
|
||||
entityHeaderContent.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (FeatureFlagUtils.isEnabled(mAppContext, FeatureFlags.APP_INFO_V2)) {
|
||||
AppInfoBase.startAppInfoFragment(
|
||||
AppInfoDashboardFragment.class, R.string.application_info_label,
|
||||
mPackageName, mUid, mFragment, 0 /* request */,
|
||||
mMetricsCategory);
|
||||
} else {
|
||||
AppInfoBase.startAppInfoFragment(
|
||||
InstalledAppDetails.class, R.string.application_info_label,
|
||||
mPackageName, mUid, mFragment, 0 /* request */,
|
||||
mMetricsCategory);
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
return;
|
||||
|
@@ -47,6 +47,7 @@ com.android.settings.applications.RunningServices
|
||||
com.android.settings.applications.ConfirmConvertToFbe
|
||||
com.android.settings.deviceinfo.PublicVolumeSettings
|
||||
com.android.settings.applications.InstalledAppDetails
|
||||
com.android.settings.applications.AppInfoDashboardFragment
|
||||
com.android.settings.accessibility.ToggleAccessibilityServicePreferenceFragment
|
||||
com.android.settings.print.PrintServiceSettingsFragment
|
||||
com.android.settings.wfd.WifiDisplaySettings
|
||||
|
@@ -35,11 +35,14 @@ import android.support.v7.preference.Preference;
|
||||
import android.support.v7.preference.PreferenceCategory;
|
||||
import android.support.v7.preference.PreferenceScreen;
|
||||
import android.text.TextUtils;
|
||||
import android.util.FeatureFlagUtils;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.SettingsActivity;
|
||||
import com.android.settings.TestConfig;
|
||||
import com.android.settings.applications.InstalledAppDetails;
|
||||
import com.android.settings.applications.AppInfoDashboardFragment;
|
||||
import com.android.settings.core.FeatureFlags;
|
||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||
import com.android.settings.widget.AppPreference;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
@@ -167,8 +170,15 @@ public class RecentLocationRequestPreferenceControllerTest {
|
||||
|
||||
preference.performClick();
|
||||
|
||||
verify(activity).startPreferencePanelAsUser(any(), eq(InstalledAppDetails.class.getName()),
|
||||
if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.APP_INFO_V2)) {
|
||||
verify(activity).startPreferencePanelAsUser(any(),
|
||||
eq(AppInfoDashboardFragment.class.getName()),
|
||||
any(Bundle.class), anyInt(), any(), any());
|
||||
} else {
|
||||
verify(activity).startPreferencePanelAsUser(any(),
|
||||
eq(InstalledAppDetails.class.getName()),
|
||||
any(Bundle.class), anyInt(), any(), any());
|
||||
}
|
||||
}
|
||||
|
||||
private static ArgumentMatcher<Preference> titleMatches(String expected) {
|
||||
|
Reference in New Issue
Block a user