NotificationIntrusivenessExtractor.java revision 1d881a1e986c706963c254fbe2b6296a1cd10b75
15190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren/*
25190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren* Copyright (C) 2014 The Android Open Source Project
35190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren*
45190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren* Licensed under the Apache License, Version 2.0 (the "License");
55190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren* you may not use this file except in compliance with the License.
65190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren* You may obtain a copy of the License at
75190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren*
85190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren*      http://www.apache.org/licenses/LICENSE-2.0
95190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren*
105190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren* Unless required by applicable law or agreed to in writing, software
115190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren* distributed under the License is distributed on an "AS IS" BASIS,
125190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren* See the License for the specific language governing permissions and
145190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren* limitations under the License.
155190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren*/
165190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren
175190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wrenpackage com.android.server.notification;
185190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren
195190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wrenimport android.app.Notification;
205190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wrenimport android.content.Context;
211d881a1e986c706963c254fbe2b6296a1cd10b75John Spurlockimport android.util.Log;
225190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wrenimport android.util.Slog;
235190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren
245190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren/**
255190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren * This {@link com.android.server.notification.NotificationSignalExtractor} noticies noisy
265190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren * notifications and marks them to get a temporary ranking bump.
275190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren */
285190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wrenpublic class NotificationIntrusivenessExtractor implements NotificationSignalExtractor {
291d881a1e986c706963c254fbe2b6296a1cd10b75John Spurlock    private static final String TAG = "IntrusivenessExtractor";
301d881a1e986c706963c254fbe2b6296a1cd10b75John Spurlock    private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
315190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren
325190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren    /** Length of time (in milliseconds) that an intrusive or noisy notification will stay at
335190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren    the top of the ranking order, before it falls back to its natural position. */
345190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren    private static final long HANG_TIME_MS = 10000;
355190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren
365190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren    public void initialize(Context ctx) {
375190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren        if (DBG) Slog.d(TAG, "Initializing  " + getClass().getSimpleName() + ".");
385190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren    }
395190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren
40470c1accf5a54f9844a779eafab74e63c09342b5Chris Wren    public RankingReconsideration process(NotificationRecord record) {
415190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren        if (record == null || record.getNotification() == null) {
425190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren            if (DBG) Slog.d(TAG, "skipping empty notification");
435190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren            return null;
445190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren        }
455190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren
465190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren        final Notification notification = record.getNotification();
475190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren        if ((notification.defaults & Notification.DEFAULT_VIBRATE) != 0 ||
485190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren                notification.vibrate != null ||
495190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren                (notification.defaults & Notification.DEFAULT_SOUND) != 0 ||
505190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren                notification.sound != null ||
515190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren                notification.fullScreenIntent != null) {
521d881a1e986c706963c254fbe2b6296a1cd10b75John Spurlock            record.setRecentlyIntrusive(true);
535190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren        }
545190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren
55470c1accf5a54f9844a779eafab74e63c09342b5Chris Wren        return new RankingReconsideration(record.getKey(), HANG_TIME_MS) {
565190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren            @Override
575190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren            public void work() {
58470c1accf5a54f9844a779eafab74e63c09342b5Chris Wren                // pass
59470c1accf5a54f9844a779eafab74e63c09342b5Chris Wren            }
60470c1accf5a54f9844a779eafab74e63c09342b5Chris Wren
61470c1accf5a54f9844a779eafab74e63c09342b5Chris Wren            @Override
62470c1accf5a54f9844a779eafab74e63c09342b5Chris Wren            public void applyChangesLocked(NotificationRecord record) {
631d881a1e986c706963c254fbe2b6296a1cd10b75John Spurlock                record.setRecentlyIntrusive(false);
645190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren            }
655190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren        };
665190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren    }
6754bbef435ed857fc68941672799fc8001c101119Chris Wren
6854bbef435ed857fc68941672799fc8001c101119Chris Wren    @Override
6954bbef435ed857fc68941672799fc8001c101119Chris Wren    public void setConfig(RankingConfig config) {
7054bbef435ed857fc68941672799fc8001c101119Chris Wren        // ignore: config has no relevant information yet.
7154bbef435ed857fc68941672799fc8001c101119Chris Wren    }
7254bbef435ed857fc68941672799fc8001c101119Chris Wren}
73