Merge "Support ACTION_NOTIFICATION_ASSISTANT_DETAIL_SETTINGS in Enhanced Notifications" into tm-qpr-dev
This commit is contained in:
@@ -18,35 +18,49 @@ package com.android.settings.notification;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.provider.Settings;
|
||||
import android.service.notification.NotificationAssistantService;
|
||||
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.TogglePreferenceController;
|
||||
import com.android.settingslib.PrimarySwitchPreference;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class NotificationAssistantPreferenceController extends TogglePreferenceController {
|
||||
private static final String TAG = "NASPreferenceController";
|
||||
private static final String KEY_NAS = "notification_assistant";
|
||||
static final String KEY_NAS = "notification_assistant";
|
||||
|
||||
private static final int AVAILABLE = 1;
|
||||
private final UserManager mUserManager;
|
||||
private final PackageManager mPackageManager;
|
||||
private Fragment mFragment;
|
||||
private int mUserId = UserHandle.myUserId();
|
||||
|
||||
@VisibleForTesting
|
||||
protected NotificationBackend mNotificationBackend;
|
||||
private ComponentName mDefaultNASComponent;
|
||||
private Intent mNASSettingIntent;
|
||||
|
||||
public NotificationAssistantPreferenceController(Context context) {
|
||||
super(context, KEY_NAS);
|
||||
mUserManager = UserManager.get(context);
|
||||
mNotificationBackend = new NotificationBackend();
|
||||
mPackageManager = context.getPackageManager();
|
||||
getDefaultNASIntent();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getAvailabilityStatus() {
|
||||
return AVAILABLE;
|
||||
@@ -55,14 +69,13 @@ public class NotificationAssistantPreferenceController extends TogglePreferenceC
|
||||
@Override
|
||||
public boolean isChecked() {
|
||||
ComponentName acn = mNotificationBackend.getAllowedNotificationAssistant();
|
||||
ComponentName dcn = mNotificationBackend.getDefaultNotificationAssistant();
|
||||
return (acn != null && acn.equals(dcn));
|
||||
return (acn != null && acn.equals(mDefaultNASComponent));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setChecked(boolean isChecked) {
|
||||
ComponentName cn = isChecked
|
||||
? mNotificationBackend.getDefaultNotificationAssistant() : null;
|
||||
? mDefaultNASComponent : null;
|
||||
if (isChecked) {
|
||||
if (mFragment == null) {
|
||||
throw new IllegalStateException("No fragment to start activity");
|
||||
@@ -103,8 +116,43 @@ public class NotificationAssistantPreferenceController extends TogglePreferenceC
|
||||
mNotificationBackend = backend;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void getDefaultNASIntent() {
|
||||
mDefaultNASComponent = mNotificationBackend.getDefaultNotificationAssistant();
|
||||
if (mDefaultNASComponent != null) {
|
||||
mNASSettingIntent = new Intent(
|
||||
NotificationAssistantService.ACTION_NOTIFICATION_ASSISTANT_DETAIL_SETTINGS);
|
||||
mNASSettingIntent.setPackage(mDefaultNASComponent.getPackageName());
|
||||
mNASSettingIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSliceable() {
|
||||
return (mFragment != null && mFragment instanceof ConfigureNotificationSettings);
|
||||
}
|
||||
|
||||
private boolean isNASSettingActivityAvailable() {
|
||||
final List<ResolveInfo> resolved = mPackageManager.queryIntentActivities(mNASSettingIntent,
|
||||
PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_ALL));
|
||||
return (resolved != null && !resolved.isEmpty());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
super.updateState(preference);
|
||||
if (isNASSettingActivityAvailable()) {
|
||||
preference.setIntent(mNASSettingIntent);
|
||||
} else {
|
||||
// Cannot find settings activity from the default NAS app
|
||||
preference.setIntent(null);
|
||||
preference.setOnPreferenceClickListener(
|
||||
preference1 -> {
|
||||
onPreferenceChange(preference1, !isChecked());
|
||||
((PrimarySwitchPreference) preference1).setChecked(isChecked());
|
||||
return true;
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user