diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 634d6841507..b3d1d6144f7 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2540,7 +2540,7 @@ + android:value="com.android.settings.applications.NotificationApps" /> diff --git a/res/values/strings.xml b/res/values/strings.xml index 91099ac82c5..fdff0820755 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6971,6 +6971,12 @@ %1$s of data used + + %1$d apps blocked from sending + + + All apps allowed to send + %1$d apps installed diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 3f69a36f370..8dafd7472de 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -61,6 +61,7 @@ import com.android.settings.applications.DrawOverlayDetails; import com.android.settings.applications.InstalledAppDetails; import com.android.settings.applications.ManageApplications; import com.android.settings.applications.ManageAssist; +import com.android.settings.applications.NotificationApps; import com.android.settings.applications.ProcessStatsSummary; import com.android.settings.applications.ProcessStatsUi; import com.android.settings.applications.UsageAccessDetails; @@ -259,6 +260,7 @@ public class SettingsActivity extends SettingsDrawerActivity DisplaySettings.class.getName(), DeviceInfoSettings.class.getName(), ManageApplications.class.getName(), + NotificationApps.class.getName(), ManageAssist.class.getName(), ProcessStatsUi.class.getName(), NotificationStation.class.getName(), diff --git a/src/com/android/settings/applications/AppStateNotificationBridge.java b/src/com/android/settings/applications/AppStateNotificationBridge.java index f1f08963800..936d1993f72 100644 --- a/src/com/android/settings/applications/AppStateNotificationBridge.java +++ b/src/com/android/settings/applications/AppStateNotificationBridge.java @@ -63,11 +63,11 @@ public class AppStateNotificationBridge extends AppStateBaseBridge { @Override public boolean filterApp(AppEntry info) { - if (info == null) { - return false; + if (info.extraInfo instanceof AppRow) { + AppRow row = (AppRow) info.extraInfo; + return row.banned; } - AppRow row = (AppRow) info.extraInfo; - return row.banned; + return false; } }; } diff --git a/src/com/android/settings/applications/NotificationApps.java b/src/com/android/settings/applications/NotificationApps.java new file mode 100644 index 00000000000..05b450ddef8 --- /dev/null +++ b/src/com/android/settings/applications/NotificationApps.java @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2016 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.settings.applications; + +import android.app.Activity; +import android.app.Application; +import android.content.Context; +import com.android.settings.R; +import com.android.settings.applications.AppStateBaseBridge.Callback; +import com.android.settings.dashboard.SummaryLoader; +import com.android.settings.dashboard.SummaryLoader.SummaryProvider; +import com.android.settings.notification.NotificationBackend; +import com.android.settingslib.applications.ApplicationsState; +import com.android.settingslib.applications.ApplicationsState.AppEntry; +import com.android.settingslib.applications.ApplicationsState.Callbacks; + +import java.util.ArrayList; + +/** + * Extension of ManageApplications with no changes other than having its own + * SummaryProvider. + */ +public class NotificationApps extends ManageApplications { + + private static class SummaryProvider implements SummaryLoader.SummaryProvider, + Callbacks, Callback { + + private final Context mContext; + private final SummaryLoader mLoader; + + private final ApplicationsState mAppState; + private final ApplicationsState.Session mSession; + private final NotificationBackend mNotifBackend; + private final AppStateNotificationBridge mExtraInfoBridge; + + private SummaryProvider(Context context, SummaryLoader loader) { + mContext = context; + mLoader = loader; + mAppState = + ApplicationsState.getInstance((Application) context.getApplicationContext()); + mSession = mAppState.newSession(this); + mNotifBackend = new NotificationBackend(); + mExtraInfoBridge = new AppStateNotificationBridge(mContext.getPackageManager(), + mAppState, this, mNotifBackend); + } + + @Override + public void setListening(boolean listening) { + if (listening) { + mSession.resume(); + mExtraInfoBridge.resume(); + } else { + mSession.pause(); + mExtraInfoBridge.pause(); + } + } + + private void updateSummary(ArrayList apps) { + if (apps == null) return; + if (apps.size() == 0) { + mLoader.setSummary(this, mContext.getString(R.string.notification_summary_none)); + } else { + mLoader.setSummary(this, mContext.getString(R.string.notification_summary, + apps.size())); + } + } + + @Override + public void onRebuildComplete(ArrayList apps) { + updateSummary(apps); + } + + @Override + public void onExtraInfoUpdated() { + updateSummary(mSession.rebuild( + AppStateNotificationBridge.FILTER_APP_NOTIFICATION_BLOCKED, + ApplicationsState.ALPHA_COMPARATOR)); + } + + @Override + public void onPackageListChanged() { + } + + @Override + public void onLauncherInfoChanged() { + } + + @Override + public void onLoadEntriesCompleted() { + } + + @Override + public void onRunningStateChanged(boolean running) { + } + + @Override + public void onPackageIconChanged() { + } + + @Override + public void onPackageSizeChanged(String packageName) { + } + + @Override + public void onAllSizesComputed() { + } + } + + public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY + = new SummaryLoader.SummaryProviderFactory() { + @Override + public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity, + SummaryLoader summaryLoader) { + return new SummaryProvider(activity, summaryLoader); + } + }; +}