Adding Manage External Sources Settings

Added a settings fragment to manage external sources. It lists all
applications that have either requested REQUEST_INSTALL_PACKAGES or have
their app op changed from default.

Test: Will include in follow-up CL. Tracked in b/33792674

Bug: 31002700
Change-Id: Ibd2a1922be214b62aec4eefa45f7b9691256b205
This commit is contained in:
Suprabh Shukla
2016-12-16 14:44:05 -08:00
parent 27cb8b4a65
commit 57d92315a4
8 changed files with 345 additions and 0 deletions

View File

@@ -58,6 +58,7 @@ import com.android.settings.AppHeader;
import com.android.settings.R;
import com.android.settings.Settings.AllApplicationsActivity;
import com.android.settings.Settings.HighPowerApplicationsActivity;
import com.android.settings.Settings.ManageExternalSourcesActivity;
import com.android.settings.Settings.NotificationAppListActivity;
import com.android.settings.Settings.OverlaySettingsActivity;
import com.android.settings.Settings.StorageUseActivity;
@@ -66,6 +67,7 @@ import com.android.settings.Settings.WriteSettingsActivity;
import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
import com.android.settings.applications.AppStateAppOpsBridge.PermissionState;
import com.android.settings.applications.AppStateInstallAppsBridge.InstallAppsState;
import com.android.settings.applications.AppStateUsageBridge.UsageState;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.dashboard.SummaryLoader;
@@ -136,6 +138,7 @@ public class ManageApplications extends InstrumentedPreferenceFragment
public static final int FILTER_APPS_USAGE_ACCESS = 8;
public static final int FILTER_APPS_WITH_OVERLAY = 9;
public static final int FILTER_APPS_WRITE_SETTINGS = 10;
public static final int FILTER_APPS_INSTALL_SOURCES = 12;
// This is the string labels for the filter modes above, the order must be kept in sync.
public static final int[] FILTER_LABELS = new int[]{
@@ -151,6 +154,7 @@ public class ManageApplications extends InstrumentedPreferenceFragment
R.string.filter_all_apps, // Usage access screen, never displayed
R.string.filter_overlay_apps, // Apps with overlay permission
R.string.filter_write_settings_apps, // Apps that can write system settings
R.string.filter_install_sources_apps, // Apps that are trusted sources of apks
};
// This is the actual mapping to filters from FILTER_ constants above, the order must
// be kept in sync.
@@ -169,6 +173,7 @@ public class ManageApplications extends InstrumentedPreferenceFragment
AppStateUsageBridge.FILTER_APP_USAGE, // Apps with Domain URLs
AppStateOverlayBridge.FILTER_SYSTEM_ALERT_WINDOW, // Apps that can draw overlays
AppStateWriteSettingsBridge.FILTER_WRITE_SETTINGS, // Apps that can write system settings
AppStateInstallAppsBridge.FILTER_APP_SOURCES,
};
// sort order
@@ -210,6 +215,7 @@ public class ManageApplications extends InstrumentedPreferenceFragment
public static final int LIST_TYPE_HIGH_POWER = 5;
public static final int LIST_TYPE_OVERLAY = 6;
public static final int LIST_TYPE_WRITE_SETTINGS = 7;
public static final int LIST_TYPE_MANAGE_SOURCES = 8;
private View mRootView;
@@ -259,6 +265,8 @@ public class ManageApplications extends InstrumentedPreferenceFragment
mListType = LIST_TYPE_OVERLAY;
} else if (className.equals(WriteSettingsActivity.class.getName())) {
mListType = LIST_TYPE_WRITE_SETTINGS;
} else if (className.equals(ManageExternalSourcesActivity.class.getName())) {
mListType = LIST_TYPE_MANAGE_SOURCES;
} else {
mListType = LIST_TYPE_MAIN;
}
@@ -379,6 +387,8 @@ public class ManageApplications extends InstrumentedPreferenceFragment
return FILTER_APPS_WITH_OVERLAY;
case LIST_TYPE_WRITE_SETTINGS:
return FILTER_APPS_WRITE_SETTINGS;
case LIST_TYPE_MANAGE_SOURCES:
return FILTER_APPS_INSTALL_SOURCES;
default:
return FILTER_APPS_ALL;
}
@@ -412,6 +422,8 @@ public class ManageApplications extends InstrumentedPreferenceFragment
return MetricsEvent.SYSTEM_ALERT_WINDOW_APPS;
case LIST_TYPE_WRITE_SETTINGS:
return MetricsEvent.SYSTEM_ALERT_WINDOW_APPS;
case LIST_TYPE_MANAGE_SOURCES:
return MetricsEvent.MANAGE_EXTERNAL_SOURCES;
default:
return MetricsEvent.VIEW_UNKNOWN;
}
@@ -503,6 +515,9 @@ public class ManageApplications extends InstrumentedPreferenceFragment
case LIST_TYPE_WRITE_SETTINGS:
startAppInfoFragment(WriteSettingsDetails.class, R.string.write_system_settings);
break;
case LIST_TYPE_MANAGE_SOURCES:
startAppInfoFragment(ExternalSourcesDetails.class, R.string.install_other_apps);
break;
// TODO: Figure out if there is a way where we can spin up the profile's settings
// 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.
@@ -796,6 +811,8 @@ public class ManageApplications extends InstrumentedPreferenceFragment
mExtraInfoBridge = new AppStateOverlayBridge(mContext, mState, this);
} else if (mManageApplications.mListType == LIST_TYPE_WRITE_SETTINGS) {
mExtraInfoBridge = new AppStateWriteSettingsBridge(mContext, mState, this);
} else if (mManageApplications.mListType == LIST_TYPE_MANAGE_SOURCES) {
mExtraInfoBridge = new AppStateInstallAppsBridge(mContext, mState, this);
} else {
mExtraInfoBridge = null;
}
@@ -1206,6 +1223,11 @@ public class ManageApplications extends InstrumentedPreferenceFragment
holder.entry));
break;
case LIST_TYPE_MANAGE_SOURCES:
holder.summary
.setText(((InstallAppsState) holder.entry.extraInfo).getSummary());
break;
default:
holder.updateSizeText(mManageApplications.mInvalidSizeStr, mWhichSize);
break;