summaryrefslogtreecommitdiffstats
path: root/service/java
diff options
context:
space:
mode:
authorRoman Birg <roman@cyngn.com>2015-09-10 09:35:36 -0700
committerRoman Birg <roman@cyngn.com>2015-12-04 09:34:32 -0800
commit4b8bf0f5ac56c37c3368e3eaa8ab24406890327f (patch)
tree4b84404eda02654b7374d3ff156d559985250c31 /service/java
parent214bf2c1ff82f8c6b06652b68b7913c36ed17741 (diff)
downloadandroid_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.java45
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);
}