diff options
author | Roman Birg <roman@cyngn.com> | 2015-09-10 09:35:36 -0700 |
---|---|---|
committer | Roman Birg <roman@cyngn.com> | 2015-12-04 09:34:32 -0800 |
commit | 4b8bf0f5ac56c37c3368e3eaa8ab24406890327f (patch) | |
tree | 4b84404eda02654b7374d3ff156d559985250c31 /service/java | |
parent | 214bf2c1ff82f8c6b06652b68b7913c36ed17741 (diff) | |
download | android_frameworks_opt_net_wifi-4b8bf0f5ac56c37c3368e3eaa8ab24406890327f.tar.gz android_frameworks_opt_net_wifi-4b8bf0f5ac56c37c3368e3eaa8ab24406890327f.tar.bz2 android_frameworks_opt_net_wifi-4b8bf0f5ac56c37c3368e3eaa8ab24406890327f.zip |
Wifi: add "turn wifi off" action to open network notification
Port-forward of cm11 change-id Id1fd4f50755c5172cdc557fc27e2298290edecef
This adds a notification button action to turn wifi off when the open
wifi network notification pops up.
Change-Id: Ie32f18bbfeaf193e3a5d78198137a9c2a39b05fb
Signed-off-by: Roman Birg <roman@cyngn.com>
Diffstat (limited to 'service/java')
-rw-r--r-- | service/java/com/android/server/wifi/WifiNotificationController.java | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/service/java/com/android/server/wifi/WifiNotificationController.java b/service/java/com/android/server/wifi/WifiNotificationController.java index 406a76467..ed0e80b23 100644 --- a/service/java/com/android/server/wifi/WifiNotificationController.java +++ b/service/java/com/android/server/wifi/WifiNotificationController.java @@ -18,6 +18,7 @@ package com.android.server.wifi; import android.app.Notification; import android.app.NotificationManager; +import android.app.PendingIntent; import android.app.TaskStackBuilder; import android.content.BroadcastReceiver; import android.content.ContentResolver; @@ -25,13 +26,15 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.ContentObserver; +import android.graphics.drawable.Icon; import android.net.NetworkInfo; import android.net.wifi.ScanResult; import android.net.wifi.WifiManager; +import android.os.AsyncTask; import android.os.Handler; -import android.os.Message; import android.os.UserHandle; import android.provider.Settings; +import com.android.internal.R; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -46,6 +49,11 @@ final class WifiNotificationController { private static final int ICON_NETWORKS_AVAILABLE = com.android.internal.R.drawable.stat_notify_wifi_in_range; /** + * Intent that the user requests the wifi be turned off from the notification + */ + private static final String ACTION_TURN_WIFI_OFF + = "com.android.server.WifiService.ACTION_TURN_WIFI_OFF"; + /** * When a notification is shown, we wait this amount before possibly showing it again. */ private final long NOTIFICATION_REPEAT_DELAY_MS; @@ -86,6 +94,11 @@ final class WifiNotificationController { * something other than scanning, we reset this to 0. */ private int mNumScansSinceNetworkStateChange; + /** + * Turns wifi off when run (IntentFilter responsible for specifying the action + * {@link #ACTION_TURN_WIFI_OFF}) + */ + private BroadcastReceiver mNotificationBroadcastReceiver = null; private final Context mContext; private final WifiStateMachine mWifiStateMachine; @@ -221,7 +234,6 @@ final class WifiNotificationController { NotificationManager notificationManager = (NotificationManager) mContext .getSystemService(Context.NOTIFICATION_SERVICE); - Message message; if (visible) { // Not enough time has passed to show the notification again @@ -230,6 +242,13 @@ final class WifiNotificationController { } if (mNotificationBuilder == null) { + final CharSequence wifiOffText = mContext.getText( + com.android.internal.R.string.notify_turn_wifi_off_title); + final PendingIntent wifiOffPi = PendingIntent.getBroadcast(mContext, 0, + new Intent(ACTION_TURN_WIFI_OFF).setPackage( + mContext.getPackageName()), + PendingIntent.FLAG_UPDATE_CURRENT); + // Cache the Notification builder object. mNotificationBuilder = new Notification.Builder(mContext) .setWhen(0) @@ -239,6 +258,8 @@ final class WifiNotificationController { .addNextIntentWithParentStack( new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK)) .getPendingIntent(0, 0, null, UserHandle.CURRENT)) + .addAction(new Notification.Action.Builder(null, + wifiOffText, wifiOffPi).build()) .setColor(mContext.getResources().getColor( com.android.internal.R.color.system_notification_accent_color)); } @@ -255,7 +276,27 @@ final class WifiNotificationController { notificationManager.notifyAsUser(null, ICON_NETWORKS_AVAILABLE, mNotificationBuilder.build(), UserHandle.ALL); + + if (mNotificationBroadcastReceiver == null) { + mNotificationBroadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + AsyncTask.execute(new Runnable() { + public void run() { + WifiManager wifiManager = (WifiManager) + mContext.getSystemService(Context.WIFI_SERVICE); + wifiManager.setWifiEnabled(false); + } + }); + } + }; + } + mContext.registerReceiver(mNotificationBroadcastReceiver, + new IntentFilter(ACTION_TURN_WIFI_OFF)); } else { + if (mNotificationBroadcastReceiver != null) { + mContext.unregisterReceiver(mNotificationBroadcastReceiver); + } notificationManager.cancelAsUser(null, ICON_NETWORKS_AVAILABLE, UserHandle.ALL); } |