Revert "Update "Open networks available" toggle to instead open notification channel preferences."

This reverts commit 2c4b42c0b7.

Reason for revert: Need to use Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON to toggle the feature because system NotificationChannels cannot be disabled.
Bug: 37794067
Test: m RunSettingsRoboTests

Change-Id: I6aaad78686f4fe929fd6bcd94897341fdaf6bd23
This commit is contained in:
Amin Shaikh
2017-05-09 20:34:53 +00:00
parent b296697e8e
commit dfa9bb8914
5 changed files with 136 additions and 245 deletions

View File

@@ -16,46 +16,75 @@
package com.android.settings.wifi;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.NetworkScorerAppData;
import android.os.RemoteException;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.provider.Settings;
import android.support.annotation.Nullable;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils;
import android.util.Log;
import com.android.settings.R;
import com.android.settings.core.PreferenceController;
import com.android.settings.network.NetworkScoreManagerWrapper;
import com.android.settings.utils.NotificationChannelHelper;
import com.android.settings.utils.NotificationChannelHelper.NotificationChannelWrapper;
import com.android.settings.core.lifecycle.Lifecycle;
import com.android.settings.core.lifecycle.LifecycleObserver;
import com.android.settings.core.lifecycle.events.OnPause;
import com.android.settings.core.lifecycle.events.OnResume;
/**
* {@link PreferenceController} that shows whether we should notify user when open network is
* available. The preference links to {@link NotificationChannel} settings.
* {@link PreferenceController} that controls whether we should notify user when open network is
* available.
*/
public class NotifyOpenNetworksPreferenceController extends PreferenceController {
public class NotifyOpenNetworksPreferenceController extends PreferenceController implements
LifecycleObserver, OnResume, OnPause {
private static final String TAG = "OpenNetworks";
private static final String KEY_NOTIFY_OPEN_NETWORKS = "notify_open_networks";
private SettingObserver mSettingObserver;
private NetworkScoreManagerWrapper mNetworkScoreManager;
private NotificationChannelHelper mNotificationChannelHelper;
private PackageManager mPackageManager;
public NotifyOpenNetworksPreferenceController(
Context context,
NetworkScoreManagerWrapper networkScoreManager,
NotificationChannelHelper notificationChannelHelper,
PackageManager packageManager) {
public NotifyOpenNetworksPreferenceController(Context context, Lifecycle lifecycle) {
super(context);
mNetworkScoreManager = networkScoreManager;
mNotificationChannelHelper = notificationChannelHelper;
mPackageManager = packageManager;
lifecycle.addObserver(this);
}
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mSettingObserver = new SettingObserver(screen.findPreference(KEY_NOTIFY_OPEN_NETWORKS));
}
@Override
public void onResume() {
if (mSettingObserver != null) {
mSettingObserver.register(mContext.getContentResolver(), true /* register */);
}
}
@Override
public void onPause() {
if (mSettingObserver != null) {
mSettingObserver.register(mContext.getContentResolver(), false /* register */);
}
}
@Override
public boolean isAvailable() {
return true;
}
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (!TextUtils.equals(preference.getKey(), KEY_NOTIFY_OPEN_NETWORKS)) {
return false;
}
if (!(preference instanceof SwitchPreference)) {
return false;
}
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
((SwitchPreference) preference).isChecked() ? 1 : 0);
return true;
}
@Override
@@ -63,60 +92,43 @@ public class NotifyOpenNetworksPreferenceController extends PreferenceController
return KEY_NOTIFY_OPEN_NETWORKS;
}
@Override
public boolean isAvailable() {
return getNotificationChannel() != null;
}
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (!TextUtils.equals(preference.getKey(), KEY_NOTIFY_OPEN_NETWORKS)) {
return false;
}
NetworkScorerAppData scorer = mNetworkScoreManager.getActiveScorer();
if (scorer == null) {
return false;
}
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_CHANNEL_ID,
scorer.getNetworkAvailableNotificationChannelId());
intent.putExtra(Settings.EXTRA_APP_PACKAGE, scorer.getRecommendationServicePackageName());
mContext.startActivity(intent);
return true;
}
@Override
public void updateState(Preference preference) {
NotificationChannelWrapper channel = getNotificationChannel();
if (channel == null) {
preference.setSummary(null);
} else {
preference.setSummary(channel.getImportance() != NotificationManager.IMPORTANCE_NONE ?
R.string.notification_toggle_on : R.string.notification_toggle_off);
if (!(preference instanceof SwitchPreference)) {
return;
}
final SwitchPreference notifyOpenNetworks = (SwitchPreference) preference;
notifyOpenNetworks.setChecked(Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 0) == 1);
notifyOpenNetworks.setEnabled(Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED, 0) == 1);
}
@Nullable
private NotificationChannelWrapper getNotificationChannel() {
NetworkScorerAppData scorer = mNetworkScoreManager.getActiveScorer();
if (scorer == null) {
return null;
class SettingObserver extends ContentObserver {
private final Uri NETWORK_RECOMMENDATIONS_ENABLED_URI =
Settings.Global.getUriFor(Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED);
private final Preference mPreference;
public SettingObserver(Preference preference) {
super(new Handler());
mPreference = preference;
}
String packageName = scorer.getRecommendationServicePackageName();
String channelId = scorer.getNetworkAvailableNotificationChannelId();
if (packageName == null || channelId == null) {
return null;
public void register(ContentResolver cr, boolean register) {
if (register) {
cr.registerContentObserver(NETWORK_RECOMMENDATIONS_ENABLED_URI, false, this);
} else {
cr.unregisterContentObserver(this);
}
}
try {
return mNotificationChannelHelper.getNotificationChannelForPackage(
packageName,
mPackageManager.getPackageUid(packageName, 0 /* flags */),
channelId,
false /* includeDeleted */ );
} catch (RemoteException | PackageManager.NameNotFoundException e) {
Log.d(TAG, "Failed to get notification channel.", e);
return null;
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
if (NETWORK_RECOMMENDATIONS_ENABLED_URI.equals(uri)) {
updateState(mPreference);
}
}
}
}