Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4ad2547f authored by Daniel Sandler's avatar Daniel Sandler Committed by Android (Google) Code Review
Browse files

Merge "Ongoing notification for GPS use." into honeycomb

parents b65b2df6 e40451a8
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ interface INotificationManager
    void enqueueToast(String pkg, ITransientNotification callback, int duration);
    void cancelToast(String pkg, ITransientNotification callback);
    void enqueueNotificationWithTag(String pkg, String tag, int id, in Notification notification, inout int[] idReceived);
    void enqueueNotificationWithTagPriority(String pkg, String tag, int id, int priority, in Notification notification, inout int[] idReceived);
    void cancelNotificationWithTag(String pkg, String tag, int id);
}
+1 −2
Original line number Diff line number Diff line
@@ -63,8 +63,7 @@ public class StatusBarNotification implements Parcelable {
        this.initialPid = initialPid;
        this.notification = notification;

        this.priority = ((notification.flags & Notification.FLAG_ONGOING_EVENT) != 0)
            ? PRIORITY_ONGOING : PRIORITY_NORMAL;
        this.priority = PRIORITY_NORMAL;
    }

    public StatusBarNotification(Parcel in) {
+6 −0
Original line number Diff line number Diff line
@@ -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>
+5 −0
Original line number Diff line number Diff line
@@ -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>
+114 −0
Original line number Diff line number Diff line
/*
 * 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
        }
    }
}
Loading