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

Commit 92d456e9 authored by Julia Reynolds's avatar Julia Reynolds
Browse files

Show app level settings when an app doesn't use topics.

Change-Id: I205062868ac3a44aa24a29bcb82a9374026287a7
parent 554bc800
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -48,13 +48,12 @@ interface INotificationManager
    boolean areNotificationsEnabledForPackage(String pkg, int uid);

    ParceledListSlice getTopics(String pkg, int uid);
    void setTopicVisibilityOverride(String pkg, int uid, in Notification.Topic topic, int visibility);
    int getTopicVisibilityOverride(String pkg, int uid, in Notification.Topic topic);
    void setTopicPriority(String pkg, int uid, in Notification.Topic topic, int priority);
    int getTopicPriority(String pkg, int uid, in Notification.Topic topic);
    void setTopicImportance(String pkg, int uid, in Notification.Topic topic, int importance);
    int getTopicImportance(String pkg, int uid, in Notification.Topic topic);
    void setAppImportance(String pkg, int uid, int importance);
    void setVisibilityOverride(String pkg, int uid, in Notification.Topic topic, int visibility);
    int getVisibilityOverride(String pkg, int uid, in Notification.Topic topic);
    void setPriority(String pkg, int uid, in Notification.Topic topic, int priority);
    int getPriority(String pkg, int uid, in Notification.Topic topic);
    void setImportance(String pkg, int uid, in Notification.Topic topic, int importance);
    int getImportance(String pkg, int uid, in Notification.Topic topic);
    boolean doesAppUseTopics(String pkg, int uid);

    // TODO: Remove this when callers have been migrated to the equivalent
+2 −7
Original line number Diff line number Diff line
@@ -206,13 +206,8 @@ public class NotificationGuts extends LinearLayout {
    void saveImportance(final StatusBarNotification sbn) {
        int progress = mSeekBar.getProgress();
        try {
            if (mApplyToTopic.isChecked()) {
                mINotificationManager.setTopicImportance(sbn.getPackageName(), sbn.getUid(), mTopic,
                        progress);
            } else {
                mINotificationManager.setAppImportance(
                        sbn.getPackageName(), sbn.getUid(), progress);
            }
            mINotificationManager.setImportance(sbn.getPackageName(), sbn.getUid(),
                    mApplyToTopic.isChecked() ? mTopic : null, progress);
        } catch (RemoteException e) {
            // :(
        }
+22 −25
Original line number Diff line number Diff line
@@ -1242,58 +1242,55 @@ public class NotificationManagerService extends SystemService {
        }

        @Override
        public void setTopicPriority(String pkg, int uid, Notification.Topic topic, int priority) {
        public void setPriority(String pkg, int uid, Notification.Topic topic, int priority) {
            checkCallerIsSystem();
            mRankingHelper.setTopicPriority(pkg, uid, topic, priority);
            mRankingHelper.setPriority(pkg, uid, topic, priority);
            savePolicyFile();
        }

        @Override
        public int getTopicPriority(String pkg, int uid, Notification.Topic topic) {
        public int getPriority(String pkg, int uid, Notification.Topic topic) {
            checkCallerIsSystem();
            return mRankingHelper.getTopicPriority(pkg, uid, topic);
            return mRankingHelper.getPriority(pkg, uid, topic);
        }

        @Override
        public void setTopicVisibilityOverride(String pkg, int uid, Notification.Topic topic,
        public void setVisibilityOverride(String pkg, int uid, Notification.Topic topic,
                int visibility) {
            checkCallerIsSystem();
            mRankingHelper.setTopicVisibilityOverride(pkg, uid, topic, visibility);
            mRankingHelper.setVisibilityOverride(pkg, uid, topic, visibility);
            savePolicyFile();
        }

        @Override
        public int getTopicVisibilityOverride(String pkg, int uid, Notification.Topic topic) {
        public int getVisibilityOverride(String pkg, int uid, Notification.Topic topic) {
            checkCallerIsSystem();
            return mRankingHelper.getTopicVisibilityOverride(pkg, uid, topic);
            return mRankingHelper.getVisibilityOverride(pkg, uid, topic);
        }

        @Override
        public void setTopicImportance(String pkg, int uid, Notification.Topic topic,
        public void setImportance(String pkg, int uid, Notification.Topic topic,
                int importance) {
            enforceSystemOrSystemUI("Caller not system or systemui");
            if (topic == null) {
                // App wide, potentially store block in app ops.
                setNotificationsEnabledForPackageImpl(pkg, uid,
                        importance != NotificationListenerService.Ranking.IMPORTANCE_NONE);
            } else {
                if (NotificationListenerService.Ranking.IMPORTANCE_NONE == importance) {
                    cancelAllNotificationsInt(MY_UID, MY_PID, pkg, 0, 0, true,
                            UserHandle.getUserId(uid),
                            REASON_TOPIC_BANNED, topic, null);
                }
            mRankingHelper.setTopicImportance(pkg, uid, topic, importance);
            }
            mRankingHelper.setImportance(pkg, uid, topic, importance);
            savePolicyFile();
        }

        @Override
        public int getTopicImportance(String pkg, int uid, Notification.Topic topic) {
        public int getImportance(String pkg, int uid, Notification.Topic topic) {
            checkCallerIsSystem();
            return mRankingHelper.getTopicImportance(pkg, uid, topic);
        }

        @Override
        public void setAppImportance(String pkg, int uid, int importance) {
            enforceSystemOrSystemUI("Caller not system or systemui");
            setNotificationsEnabledForPackageImpl(pkg, uid,
                    importance != NotificationListenerService.Ranking.IMPORTANCE_NONE);
            mRankingHelper.setAppImportance(pkg, uid, importance);
            savePolicyFile();
            return mRankingHelper.getImportance(pkg, uid, topic);
        }

        @Override
+6 −8
Original line number Diff line number Diff line
@@ -23,20 +23,18 @@ public interface RankingConfig {

    List<Notification.Topic> getTopics(String packageName, int uid);

    int getTopicPriority(String packageName, int uid, Notification.Topic topic);
    int getPriority(String packageName, int uid, Notification.Topic topic);

    void setTopicPriority(String packageName, int uid, Notification.Topic topic, int priority);
    void setPriority(String packageName, int uid, Notification.Topic topic, int priority);

    int getTopicVisibilityOverride(String packageName, int uid, Notification.Topic topic);
    int getVisibilityOverride(String packageName, int uid, Notification.Topic topic);

    void setTopicVisibilityOverride(String packageName, int uid, Notification.Topic topic,
    void setVisibilityOverride(String packageName, int uid, Notification.Topic topic,
            int visibility);

    void setTopicImportance(String packageName, int uid, Notification.Topic topic, int importance);
    void setImportance(String packageName, int uid, Notification.Topic topic, int importance);

    int getTopicImportance(String packageName, int uid, Notification.Topic topic);

    void setAppImportance(String packageName, int uid, int importance);
    int getImportance(String packageName, int uid, Notification.Topic topic);

    boolean doesAppUseTopics(String packageName, int uid);
}
+92 −25
Original line number Diff line number Diff line
@@ -164,6 +164,8 @@ public class RankingHelper implements RankingConfig {
                            r = getOrCreateRecord(name, uid);
                        }
                        r.importance = safeInt(parser, ATT_IMPORTANCE, DEFAULT_IMPORTANCE);
                        r.priority = priority;
                        r.visibility = vis;

                        // Migrate package level settings to the default topic.
                        // Might be overwritten by parseTopics.
@@ -245,7 +247,15 @@ public class RankingHelper implements RankingConfig {
            }
            out.startTag(null, TAG_PACKAGE);
            out.attribute(null, ATT_NAME, r.pkg);
            if (r.importance != DEFAULT_IMPORTANCE) {
                out.attribute(null, ATT_IMPORTANCE, Integer.toString(r.importance));
            }
            if (r.priority != DEFAULT_PRIORITY) {
                out.attribute(null, ATT_PRIORITY, Integer.toString(r.priority));
            }
            if (r.visibility != DEFAULT_VISIBILITY) {
                out.attribute(null, ATT_VISIBILITY, Integer.toString(r.visibility));
            }

            if (!forBackup) {
                out.attribute(null, ATT_UID, Integer.toString(r.uid));
@@ -379,61 +389,104 @@ public class RankingHelper implements RankingConfig {
        return topics;
    }

    /**
     * Gets priority. If a topic is given, returns the priority of that topic. Otherwise, the
     * priority of the app.
     */
    @Override
    public int getTopicPriority(String packageName, int uid, Notification.Topic topic) {
    public int getPriority(String packageName, int uid, Notification.Topic topic) {
        final Record r = getOrCreateRecord(packageName, uid);
        if (topic == null) {
            return r.priority;
        }
        return getOrCreateTopic(r, topic).priority;
    }

    /**
     * Sets priority. If a topic is given, sets the priority of that topic. If not,
     * sets the default priority for all new topics that appear in the future, and resets
     * the priority of all current topics.
     */
    @Override
    public void setTopicPriority(String packageName, int uid, Notification.Topic topic,
    public void setPriority(String packageName, int uid, Notification.Topic topic,
            int priority) {
        final Record r = getOrCreateRecord(packageName, uid);
        if (topic == null) {
            r.priority = priority;
            for (Topic t : r.topics.values()) {
                t.priority = priority;
            }
        } else {
            getOrCreateTopic(r, topic).priority = priority;
        }
        updateConfig();
    }

    /**
     * Gets visual override. If a topic is given, returns the override of that topic. Otherwise, the
     * override of the app.
     */
    @Override
    public int getTopicVisibilityOverride(String packageName, int uid, Notification.Topic topic) {
    public int getVisibilityOverride(String packageName, int uid, Notification.Topic topic) {
        final Record r = getOrCreateRecord(packageName, uid);
        if (topic == null) {
            return r.visibility;
        }
        return getOrCreateTopic(r, topic).visibility;
    }

    /**
     * Sets visibility override. If a topic is given, sets the override of that topic. If not,
     * sets the default override for all new topics that appear in the future, and resets
     * the override of all current topics.
     */
    @Override
    public void setTopicVisibilityOverride(String pkgName, int uid, Notification.Topic topic,
    public void setVisibilityOverride(String pkgName, int uid, Notification.Topic topic,
        int visibility) {
        final Record r = getOrCreateRecord(pkgName, uid);
        if (topic == null) {
            r.visibility = visibility;
            for (Topic t : r.topics.values()) {
                t.visibility = visibility;
            }
        } else {
            getOrCreateTopic(r, topic).visibility = visibility;
        }
        updateConfig();
    }

    /**
     * Gets importance. If a topic is given, returns the importance of that topic. Otherwise, the
     * importance of the app.
     */
    @Override
    public int getTopicImportance(String packageName, int uid, Notification.Topic topic) {
    public int getImportance(String packageName, int uid, Notification.Topic topic) {
        final Record r = getOrCreateRecord(packageName, uid);
        return getOrCreateTopic(r, topic).importance;
        if (topic == null) {
            return r.importance;
        }

    @Override
    public void setTopicImportance(String pkgName, int uid, Notification.Topic topic,
            int importance) {
        final Record r = getOrCreateRecord(pkgName, uid);
        getOrCreateTopic(r, topic).importance = importance;
        updateConfig();
        return getOrCreateTopic(r, topic).importance;
    }

    /**
     * Sets the default importance for all new topics that appear in the future, and resets
     * Sets importance. If a topic is given, sets the importance of that topic. If not, sets the
     * default importance for all new topics that appear in the future, and resets
     * the importance of all current topics (unless the app is being blocked).
     */
    @Override
    public void setAppImportance(String pkgName, int uid, int importance) {
    public void setImportance(String pkgName, int uid, Notification.Topic topic,
            int importance) {
        final Record r = getOrCreateRecord(pkgName, uid);
        if (topic == null) {
            r.importance = importance;
            if (Ranking.IMPORTANCE_NONE != importance) {
                for (Topic t : r.topics.values()) {
                    t.importance = importance;
                }
            }
        } else {
            getOrCreateTopic(r, topic).importance = importance;
        }
        updateConfig();
    }

@@ -459,6 +512,8 @@ public class RankingHelper implements RankingConfig {
        } else {
            t = new Topic(topic);
            t.importance = r.importance;
            t.priority = r.priority;
            t.visibility = r.visibility;
            r.topics.put(topic.getId(), t);
            return t;
        }
@@ -503,8 +558,18 @@ public class RankingHelper implements RankingConfig {
                pw.print(" (");
                pw.print(r.uid == Record.UNKNOWN_UID ? "UNKNOWN_UID" : Integer.toString(r.uid));
                pw.print(')');
                if (r.importance != DEFAULT_IMPORTANCE) {
                    pw.print(" importance=");
                    pw.print(Ranking.importanceToString(r.importance));
                }
                if (r.priority != DEFAULT_PRIORITY) {
                    pw.print(" priority=");
                    pw.print(Ranking.importanceToString(r.priority));
                }
                if (r.visibility != DEFAULT_VISIBILITY) {
                    pw.print(" visibility=");
                    pw.print(Ranking.importanceToString(r.visibility));
                }
                pw.println();
                for (Topic t : r.topics.values()) {
                    pw.print(prefix);
@@ -561,6 +626,8 @@ public class RankingHelper implements RankingConfig {
        String pkg;
        int uid = UNKNOWN_UID;
        int importance = DEFAULT_IMPORTANCE;
        int priority = DEFAULT_PRIORITY;
        int visibility = DEFAULT_VISIBILITY;
        Map<String, Topic> topics = new ArrayMap<>();
   }

Loading