Add device list to NLS pages
If a notification listener has access via the companion device manager api, list the name(s) of the associated devices to give the user more context about why the app has notification listener access. Test: settings unit Bug: 181125174 Change-Id: I01771b2c4e136fe16d23e89f33f85f63803e3f7c
This commit is contained in:
@@ -16,10 +16,14 @@
|
||||
|
||||
package com.android.settings.applications.specialaccess.notificationaccess;
|
||||
|
||||
import android.companion.ICompanionDeviceManager;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.RemoteException;
|
||||
import android.util.IconDrawableFactory;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.lifecycle.LifecycleObserver;
|
||||
@@ -32,9 +36,15 @@ import com.android.settings.core.PreferenceControllerMixin;
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settings.widget.EntityHeaderController;
|
||||
import com.android.settingslib.applications.AppUtils;
|
||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
import com.android.settingslib.widget.LayoutPreference;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class HeaderPreferenceController extends BasePreferenceController
|
||||
implements PreferenceControllerMixin, LifecycleObserver {
|
||||
|
||||
@@ -43,6 +53,10 @@ public class HeaderPreferenceController extends BasePreferenceController
|
||||
private PackageInfo mPackageInfo;
|
||||
private PackageManager mPm;
|
||||
private CharSequence mServiceName;
|
||||
private ICompanionDeviceManager mCdm;
|
||||
private LocalBluetoothManager mBm;
|
||||
private ComponentName mCn;
|
||||
private int mUserId;
|
||||
|
||||
public HeaderPreferenceController(Context context, String key) {
|
||||
super(context, key);
|
||||
@@ -68,6 +82,26 @@ public class HeaderPreferenceController extends BasePreferenceController
|
||||
return this;
|
||||
}
|
||||
|
||||
public HeaderPreferenceController setCdm(ICompanionDeviceManager cdm) {
|
||||
mCdm = cdm;
|
||||
return this;
|
||||
}
|
||||
|
||||
public HeaderPreferenceController setBluetoothManager(LocalBluetoothManager bm) {
|
||||
mBm = bm;
|
||||
return this;
|
||||
}
|
||||
|
||||
public HeaderPreferenceController setCn(ComponentName cn) {
|
||||
mCn = cn;
|
||||
return this;
|
||||
}
|
||||
|
||||
public HeaderPreferenceController setUserId(int userId) {
|
||||
mUserId = userId;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAvailabilityStatus() {
|
||||
return AVAILABLE;
|
||||
@@ -88,6 +122,7 @@ public class HeaderPreferenceController extends BasePreferenceController
|
||||
.getBadgedIcon(mPackageInfo.applicationInfo))
|
||||
.setLabel(mPackageInfo.applicationInfo.loadLabel(mPm))
|
||||
.setSummary(mServiceName)
|
||||
.setSecondSummary(getDeviceList())
|
||||
.setIsInstantApp(AppUtils.isInstant(mPackageInfo.applicationInfo))
|
||||
.setPackageName(mPackageInfo.packageName)
|
||||
.setUid(mPackageInfo.applicationInfo.uid)
|
||||
@@ -104,4 +139,33 @@ public class HeaderPreferenceController extends BasePreferenceController
|
||||
mHeaderController.styleActionBar(mFragment.getActivity());
|
||||
}
|
||||
}
|
||||
|
||||
protected CharSequence getDeviceList() {
|
||||
boolean multiple = false;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
try {
|
||||
List<String> associatedMacAddrs =
|
||||
mCdm.getAssociations(mCn.getPackageName(), mUserId);
|
||||
if (associatedMacAddrs != null) {
|
||||
for (String assocMac : associatedMacAddrs) {
|
||||
final Collection<CachedBluetoothDevice> cachedDevices =
|
||||
mBm.getCachedDeviceManager().getCachedDevicesCopy();
|
||||
for (CachedBluetoothDevice cachedBluetoothDevice : cachedDevices) {
|
||||
if (Objects.equals(assocMac, cachedBluetoothDevice.getAddress())) {
|
||||
if (multiple) {
|
||||
sb.append(", ");
|
||||
} else {
|
||||
multiple = true;
|
||||
}
|
||||
sb.append(cachedBluetoothDevice.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (RemoteException e) {
|
||||
Log.w(TAG, "Error calling CDM", e);
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
@@ -21,7 +21,7 @@ import static com.android.settings.applications.AppInfoBase.ARG_PACKAGE_NAME;
|
||||
import android.app.Activity;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.companion.ICompanionDeviceManager;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -30,6 +30,7 @@ import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.content.pm.ServiceInfo;
|
||||
import android.os.Bundle;
|
||||
import android.os.ServiceManager;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.provider.Settings;
|
||||
@@ -45,14 +46,13 @@ import com.android.settings.R;
|
||||
import com.android.settings.SettingsActivity;
|
||||
import com.android.settings.applications.AppInfoBase;
|
||||
import com.android.settings.applications.manageapplications.ManageApplications;
|
||||
import com.android.settings.bluetooth.Utils;
|
||||
import com.android.settings.core.SubSettingLauncher;
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settings.notification.NotificationBackend;
|
||||
import com.android.settingslib.RestrictedLockUtils;
|
||||
import com.android.settingslib.RestrictedLockUtilsInternal;
|
||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -99,7 +99,12 @@ public class NotificationAccessDetails extends DashboardFragment {
|
||||
.setFragment(this)
|
||||
.setPackageInfo(mPackageInfo)
|
||||
.setPm(context.getPackageManager())
|
||||
.setServiceName(mServiceName);
|
||||
.setServiceName(mServiceName)
|
||||
.setBluetoothManager(Utils.getLocalBtManager(context))
|
||||
.setCdm(ICompanionDeviceManager.Stub.asInterface(
|
||||
ServiceManager.getService(Context.COMPANION_DEVICE_SERVICE)))
|
||||
.setCn(mComponentName)
|
||||
.setUserId(mUserId);
|
||||
getPreferenceControllers().forEach(controllers -> {
|
||||
controllers.forEach(controller -> {
|
||||
if (controller instanceof TypeFilterPreferenceController) {
|
||||
|
Reference in New Issue
Block a user