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;
215190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wrenimport android.util.Slog;
225190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren
235190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren/**
245190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren * This {@link com.android.server.notification.NotificationSignalExtractor} noticies noisy
255190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren * notifications and marks them to get a temporary ranking bump.
265190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren */
275190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wrenpublic class NotificationIntrusivenessExtractor implements NotificationSignalExtractor {
285190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren    private static final String TAG = "NotificationNoiseExtractor";
295190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren    private static final boolean DBG = false;
305190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren
315190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren    /** Length of time (in milliseconds) that an intrusive or noisy notification will stay at
325190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren    the top of the ranking order, before it falls back to its natural position. */
335190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren    private static final long HANG_TIME_MS = 10000;
345190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren
355190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren    public void initialize(Context ctx) {
365190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren        if (DBG) Slog.d(TAG, "Initializing  " + getClass().getSimpleName() + ".");
375190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren    }
385190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren
39470c1accf5a54f9844a779eafab74e63c09342b5Chris Wren    public RankingReconsideration process(NotificationRecord record) {
405190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren        if (record == null || record.getNotification() == null) {
415190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren            if (DBG) Slog.d(TAG, "skipping empty notification");
425190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren            return null;
435190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren        }
445190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren
455190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren        final Notification notification = record.getNotification();
465190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren        if ((notification.defaults & Notification.DEFAULT_VIBRATE) != 0 ||
475190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren                notification.vibrate != null ||
485190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren                (notification.defaults & Notification.DEFAULT_SOUND) != 0 ||
495190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren                notification.sound != null ||
505190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren                notification.fullScreenIntent != null) {
515190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren            record.setRecentlyIntusive(true);
525190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren        }
535190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren
54470c1accf5a54f9844a779eafab74e63c09342b5Chris Wren        return new RankingReconsideration(record.getKey(), HANG_TIME_MS) {
555190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren            @Override
565190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren            public void work() {
57470c1accf5a54f9844a779eafab74e63c09342b5Chris Wren                // pass
58470c1accf5a54f9844a779eafab74e63c09342b5Chris Wren            }
59470c1accf5a54f9844a779eafab74e63c09342b5Chris Wren
60470c1accf5a54f9844a779eafab74e63c09342b5Chris Wren            @Override
61470c1accf5a54f9844a779eafab74e63c09342b5Chris Wren            public void applyChangesLocked(NotificationRecord record) {
62470c1accf5a54f9844a779eafab74e63c09342b5Chris Wren                record.setRecentlyIntusive(false);
635190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren            }
645190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren        };
655190c0fefac9923931b5c1c02cab2d00c2d6b82bChris Wren    }
6654bbef435ed857fc68941672799fc8001c101119Chris Wren
6754bbef435ed857fc68941672799fc8001c101119Chris Wren    @Override
6854bbef435ed857fc68941672799fc8001c101119Chris Wren    public void setConfig(RankingConfig config) {
6954bbef435ed857fc68941672799fc8001c101119Chris Wren        // ignore: config has no relevant information yet.
7054bbef435ed857fc68941672799fc8001c101119Chris Wren    }
7154bbef435ed857fc68941672799fc8001c101119Chris Wren}
72