Adding settings for managing auto-enter picture-in-picture.

- Add per-app setting for users to control whether an app can
  enter picture-in-picture when it is hidden.

Bug: 34520451
Test: make -j40 RunSettingsRoboTests
Change-Id: I182d6069ad01e42f1d3d6623ea21362ce802efba
Signed-off-by: Winson Chung <winsonc@google.com>
This commit is contained in:
Winson Chung
2017-01-20 11:22:44 -08:00
parent 32bc813f04
commit 0a0d95a05a
11 changed files with 467 additions and 6 deletions

View File

@@ -21,8 +21,6 @@ import android.app.Activity;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.LoaderManager.LoaderCallbacks;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.admin.DevicePolicyManager;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
@@ -52,9 +50,8 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import android.service.notification.NotificationListenerService.Ranking;
import android.support.annotation.VisibleForTesting;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceClickListener;
import android.support.v7.preference.PreferenceCategory;
@@ -78,7 +75,6 @@ import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.os.BatterySipper;
import com.android.internal.os.BatteryStatsHelper;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.AppHeader;
import com.android.settings.DeviceAdminAdd;
import com.android.settings.R;
@@ -933,9 +929,23 @@ public class InstalledAppDetails extends AppInfoBase
AdvancedAppSettings.class, "default_sms_app", R.string.sms_application_title,
R.string.configure_apps));
}
// Get the package info with the activities
PackageInfo packageInfoWithActivities = null;
try {
packageInfoWithActivities = mPm.getPackageInfoAsUser(mPackageName,
PackageManager.GET_ACTIVITIES, UserHandle.myUserId());
} catch (NameNotFoundException e) {
Log.e(TAG, "Exception while retrieving the package info of " + mPackageName, e);
}
boolean hasDrawOverOtherApps = hasPermission(permission.SYSTEM_ALERT_WINDOW);
boolean hasWriteSettings = hasPermission(permission.WRITE_SETTINGS);
if (hasDrawOverOtherApps || hasWriteSettings) {
boolean hasPictureInPictureActivities = (packageInfoWithActivities != null) &&
PictureInPictureSettings.checkPackageHasPictureInPictureActivities(
packageInfoWithActivities.packageName,
packageInfoWithActivities.activities);
if (hasDrawOverOtherApps || hasWriteSettings || hasPictureInPictureActivities) {
PreferenceCategory category = new PreferenceCategory(getPrefContext());
category.setTitle(R.string.advanced_apps);
screen.addPreference(category);
@@ -968,6 +978,23 @@ public class InstalledAppDetails extends AppInfoBase
});
category.addPreference(pref);
}
if (hasPictureInPictureActivities) {
final SwitchPreference pref = new SwitchPreference(getPrefContext());
pref.setPersistent(false);
pref.setTitle(R.string.picture_in_picture_app_detail_title);
pref.setSummary(R.string.picture_in_picture_app_detail_summary);
pref.setChecked(PictureInPictureSettings.getEnterPipOnHideStateForPackage(
getContext(), mPackageInfo.applicationInfo.uid, mPackageName));
pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
PictureInPictureSettings.setEnterPipOnHideStateForPackage(getContext(),
mPackageInfo.applicationInfo.uid, mPackageName, (Boolean) newValue);
return true;
}
});
category.addPreference(pref);
}
}
addAppInstallerInfoPref(screen);