diff options
author | Daniel Sandler <dsandler@google.com> | 2011-02-03 14:51:35 -0500 |
---|---|---|
committer | Daniel Sandler <dsandler@google.com> | 2011-02-03 21:11:46 -0500 |
commit | e40451a89dc91dfd636af7cb32a23b4a4cc93fdc (patch) | |
tree | 875a847a9a638ce36310887dc7818e02e8cb96dc /packages/SystemUI | |
parent | 8275c6087897e8fd614681d1cd12db62e6b9fcd5 (diff) | |
download | frameworks_base-e40451a89dc91dfd636af7cb32a23b4a4cc93fdc.zip frameworks_base-e40451a89dc91dfd636af7cb32a23b4a4cc93fdc.tar.gz frameworks_base-e40451a89dc91dfd636af7cb32a23b4a4cc93fdc.tar.bz2 |
Ongoing notification for GPS use.
This change improves upon the notification priority API
introduced in change I9e738cc4, allowing privileged clients
to set the priority of a notification when posting it
directly to INotificationManager. StatusBarTest is updated
to test this new feature.
The new LocationController in SystemUI uses this facility to
post a high-priority ongoing notification whenever GPS is in
use (replacing the functionality of the legacy GPS status
bar icon).
Also happens to fix http://b/3325472 (adding a log message
when notifications are dropped because of a missing icon).
Bug: 3412807
Change-Id: I523016ffa53bf979be98ddc4a2deb55a6270c68a
Diffstat (limited to 'packages/SystemUI')
4 files changed, 129 insertions, 0 deletions
diff --git a/packages/SystemUI/res/values-es-rUS-xlarge/strings.xml b/packages/SystemUI/res/values-es-rUS-xlarge/strings.xml index 00b951e..7ba493d 100644 --- a/packages/SystemUI/res/values-es-rUS-xlarge/strings.xml +++ b/packages/SystemUI/res/values-es-rUS-xlarge/strings.xml @@ -22,4 +22,10 @@ <string name="status_bar_clear_all_button" msgid="4722520806446512408">"Eliminar todos"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Sin conexión a Int."</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"WiFi conectado"</string> + + <!-- manually translated --> + <string name="gps_notification_searching_text">Buscando señal de GPS</string> + + <!-- manually translated --> + <string name="gps_notification_found_text">Ubicación establecida por el GPS</string> </resources> diff --git a/packages/SystemUI/res/values-xlarge/strings.xml b/packages/SystemUI/res/values-xlarge/strings.xml index f7b642d..dfd5851 100644 --- a/packages/SystemUI/res/values-xlarge/strings.xml +++ b/packages/SystemUI/res/values-xlarge/strings.xml @@ -38,4 +38,9 @@ <!-- Separator for PLMN and SPN in network name. --> <string name="status_bar_network_name_separator" translatable="false">" – "</string> + <!-- Notification text: when GPS is getting a fix [CHAR LIMIT=50] --> + <string name="gps_notification_searching_text">Searching for GPS</string> + + <!-- Notification text: when GPS has found a fix [CHAR LIMIT=50] --> + <string name="gps_notification_found_text">Location set by GPS</string> </resources> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java new file mode 100644 index 0000000..76c05d2 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.policy; + +import java.util.ArrayList; + +import android.app.Notification; +import android.app.NotificationManager; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.location.LocationManager; +import android.util.Slog; +import android.view.View; +import android.widget.ImageView; + +// private NM API +import android.app.INotificationManager; +import com.android.internal.statusbar.StatusBarNotification; + +import com.android.systemui.R; + +public class LocationController extends BroadcastReceiver { + private static final String TAG = "StatusBar.LocationController"; + + private static final int GPS_NOTIFICATION_ID = 374203-122084; + + private Context mContext; + + private INotificationManager mNotificationService; + + public LocationController(Context context) { + mContext = context; + + IntentFilter filter = new IntentFilter(); + filter.addAction(LocationManager.GPS_ENABLED_CHANGE_ACTION); + filter.addAction(LocationManager.GPS_FIX_CHANGE_ACTION); + context.registerReceiver(this, filter); + + NotificationManager nm = (NotificationManager)context.getSystemService( + Context.NOTIFICATION_SERVICE); + mNotificationService = nm.getService(); + } + + @Override + public void onReceive(Context context, Intent intent) { + final String action = intent.getAction(); + final boolean enabled = intent.getBooleanExtra(LocationManager.EXTRA_GPS_ENABLED, false); + + boolean visible; + int iconId, textResId; + + if (action.equals(LocationManager.GPS_FIX_CHANGE_ACTION) && enabled) { + // GPS is getting fixes + iconId = com.android.internal.R.drawable.stat_sys_gps_on; + textResId = R.string.gps_notification_found_text; + visible = true; + } else if (action.equals(LocationManager.GPS_ENABLED_CHANGE_ACTION) && !enabled) { + // GPS is off + visible = false; + iconId = textResId = 0; + } else { + // GPS is on, but not receiving fixes + iconId = R.drawable.stat_sys_gps_acquiring_anim; + textResId = R.string.gps_notification_searching_text; + visible = true; + } + + try { + if (visible) { + Notification n = new Notification.Builder(mContext) + .setSmallIcon(iconId) + .setContentTitle(mContext.getText(textResId)) + .setOngoing(true) + .getNotification(); + + // Notification.Builder will helpfully fill these out for you no matter what you do + n.tickerView = null; + n.tickerText = null; + + int[] idOut = new int[1]; + mNotificationService.enqueueNotificationWithTagPriority( + mContext.getPackageName(), + null, + GPS_NOTIFICATION_ID, + StatusBarNotification.PRIORITY_SYSTEM, // !!!1!one!!! + n, + idOut); + } else { + mNotificationService.cancelNotification( + mContext.getPackageName(), + GPS_NOTIFICATION_ID); + } + } catch (android.os.RemoteException ex) { + // well, it was worth a shot + } + } +} + diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java index 4bac07f..7a13fde 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java @@ -65,6 +65,7 @@ import com.android.systemui.R; import com.android.systemui.statusbar.*; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BluetoothController; +import com.android.systemui.statusbar.policy.LocationController; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.recent.RecentApplicationsActivity; @@ -135,6 +136,7 @@ public class TabletStatusBar extends StatusBar implements HeightReceiver mHeightReceiver; BatteryController mBatteryController; BluetoothController mBluetoothController; + LocationController mLocationController; NetworkController mNetworkController; View mBarContents; @@ -359,6 +361,8 @@ public class TabletStatusBar extends StatusBar implements mTicker = new TabletTicker(this); // The icons + mLocationController = new LocationController(mContext); // will post a notification + mBatteryController = new BatteryController(mContext); mBatteryController.addIconView((ImageView)sb.findViewById(R.id.battery)); mBluetoothController = new BluetoothController(mContext); |