Merge "Fix NotificationLockscreenPreference" into nyc-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 634d684..b3d1d61 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2540,7 +2540,7 @@
<meta-data android:name="com.android.settings.category"
android:value="com.android.settings.category.device" />
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.applications.ManageApplications" />
+ android:value="com.android.settings.applications.NotificationApps" />
</activity>
<!-- Show application-level notification settings (app passed in as extras) -->
diff --git a/res/drawable/ic_info.xml b/res/drawable/ic_info_outline.xml
similarity index 100%
rename from res/drawable/ic_info.xml
rename to res/drawable/ic_info_outline.xml
diff --git a/res/layout/accessibility_settings_for_suw.xml b/res/layout/accessibility_settings_for_suw.xml
new file mode 100644
index 0000000..a02c516
--- /dev/null
+++ b/res/layout/accessibility_settings_for_suw.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <FrameLayout
+ android:id="@+id/suw_main_content"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
+ <com.android.setupwizardlib.view.NavigationBar
+ android:id="@+id/suw_navigation_bar"
+ style="@style/SuwNavBarTheme"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/suw_navbar_height" />
+
+</LinearLayout>
diff --git a/res/layout/admin_support_details_dialog.xml b/res/layout/admin_support_details_dialog.xml
index c796cc4..51e31b9 100644
--- a/res/layout/admin_support_details_dialog.xml
+++ b/res/layout/admin_support_details_dialog.xml
@@ -27,7 +27,7 @@
<ImageView android:id="@+id/admin_support_icon"
android:layout_width="@dimen/admin_details_dialog_icon_size"
android:layout_height="@dimen/admin_details_dialog_icon_size"
- android:src="@drawable/ic_settings_lock_outline"
+ android:src="@drawable/ic_info"
android:scaleType="fitCenter"
android:contentDescription="@null" />
<TextView
diff --git a/res/layout/preference_user_delete_widget.xml b/res/layout/preference_user_delete_widget.xml
deleted file mode 100644
index 9c1ba72..0000000
--- a/res/layout/preference_user_delete_widget.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 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.
--->
-
-<!-- Used by UserPreference to show the trash icon -->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:orientation="horizontal">
- <View
- android:id="@+id/divider_manage"
- android:layout_width="2dip"
- android:layout_height="match_parent"
- android:layout_marginTop="5dip"
- android:layout_marginBottom="5dip"
- android:background="@android:drawable/divider_horizontal_dark" />
- <ImageView
- android:id="@+id/manage_user"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:paddingStart="16dip"
- android:paddingEnd="16dip"
- android:src="@drawable/ic_sysbar_quicksettings"
- android:contentDescription="@string/settings_label"
- android:layout_gravity="center"
- android:background="?android:attr/selectableItemBackground" />
- <View
- android:id="@+id/divider_delete"
- android:layout_width="2dip"
- android:layout_height="match_parent"
- android:layout_marginTop="5dip"
- android:layout_marginBottom="5dip"
- android:background="@android:drawable/divider_horizontal_dark" />
- <ImageView
- android:id="@+id/trash_user"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:paddingStart="16dip"
- android:paddingEnd="16dip"
- android:src="@drawable/ic_menu_delete"
- android:contentDescription="@string/user_delete_user_description"
- android:layout_gravity="center"
- android:background="?android:attr/selectableItemBackground" />
-</LinearLayout>
diff --git a/res/layout/preference_volume_slider.xml b/res/layout/preference_volume_slider.xml
index d279eb6..c5c7818 100644
--- a/res/layout/preference_volume_slider.xml
+++ b/res/layout/preference_volume_slider.xml
@@ -30,14 +30,26 @@
android:layout_marginTop="8dip"
android:layout_marginBottom="8dip">
- <TextView android:id="@android:id/title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:textAppearance="@android:style/TextAppearance.Material.Subhead"
- android:textColor="?android:attr/textColorPrimary"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal" />
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <TextView android:id="@android:id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:singleLine="true"
+ android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+ android:textColor="?android:attr/textColorPrimary"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal" />
+ <!-- Preference should place its actual preference widget here. -->
+ <LinearLayout android:id="@android:id/widget_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:gravity="end|center_vertical"
+ android:paddingStart="16dp"
+ android:orientation="vertical" />
+ </LinearLayout>
<FrameLayout
android:layout_width="match_parent"
diff --git a/res/layout/printer_dropdown_item.xml b/res/layout/printer_dropdown_item.xml
index 1209aa6..1e3f1a8 100644
--- a/res/layout/printer_dropdown_item.xml
+++ b/res/layout/printer_dropdown_item.xml
@@ -84,7 +84,7 @@
android:layout_gravity="center_vertical"
android:paddingLeft="16dip"
android:contentDescription="@string/printer_info_desc"
- android:src="@drawable/ic_info"
+ android:src="@drawable/ic_info_outline"
android:tint="?android:attr/colorControlNormal"
android:tintMode="src_in"
android:visibility="gone">
diff --git a/res/layout/restricted_dialog_singlechoice.xml b/res/layout/restricted_dialog_singlechoice.xml
index 0e0fe4c..f75493e 100644
--- a/res/layout/restricted_dialog_singlechoice.xml
+++ b/res/layout/restricted_dialog_singlechoice.xml
@@ -35,10 +35,10 @@
android:ellipsize="marquee" />
<ImageView
android:id="@+id/restricted_lock_icon"
- android:layout_width="@dimen/restricted_lock_icon_size"
- android:layout_height="@dimen/restricted_lock_icon_size"
- android:src="@drawable/ic_settings_lock_outline"
- android:layout_marginLeft="@dimen/restricted_lock_icon_padding"
+ android:layout_width="@dimen/restricted_icon_size"
+ android:layout_height="@dimen/restricted_icon_size"
+ android:src="@drawable/ic_info"
+ android:layout_marginLeft="@dimen/restricted_icon_padding"
android:baselineAlignBottom="true"
android:scaleType="centerInside"
android:visibility="gone" />
diff --git a/res/layout/restricted_preference_user_delete_widget.xml b/res/layout/restricted_preference_user_delete_widget.xml
new file mode 100644
index 0000000..7ffb0e4
--- /dev/null
+++ b/res/layout/restricted_preference_user_delete_widget.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<!-- Used by UserPreference to show the trash icon -->
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+ <include layout="@layout/restricted_icon" />
+
+ <LinearLayout android:id="@+id/user_delete_widget"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:orientation="horizontal">
+ <View
+ android:id="@+id/divider_manage"
+ android:layout_width="2dip"
+ android:layout_height="match_parent"
+ android:layout_marginTop="5dip"
+ android:layout_marginBottom="5dip"
+ android:background="@android:drawable/divider_horizontal_dark" />
+ <ImageView
+ android:id="@+id/manage_user"
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:paddingStart="16dip"
+ android:paddingEnd="16dip"
+ android:src="@drawable/ic_sysbar_quicksettings"
+ android:contentDescription="@string/settings_label"
+ android:layout_gravity="center"
+ android:background="?android:attr/selectableItemBackground" />
+ <View
+ android:id="@+id/divider_delete"
+ android:layout_width="2dip"
+ android:layout_height="match_parent"
+ android:layout_marginTop="5dip"
+ android:layout_marginBottom="5dip"
+ android:background="@android:drawable/divider_horizontal_dark" />
+ <ImageView
+ android:id="@+id/trash_user"
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:paddingStart="16dip"
+ android:paddingEnd="16dip"
+ android:src="@drawable/ic_menu_delete"
+ android:contentDescription="@string/user_delete_user_description"
+ android:layout_gravity="center"
+ android:background="?android:attr/selectableItemBackground" />
+ </LinearLayout>
+</merge>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e900832..1c78f56 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5974,7 +5974,7 @@
<string name="notification_importance_default">Normal: Allow these notification to make sounds</string>
<!-- [CHAR LIMIT=100] Notification Importance slider: high importance level description -->
- <string name="notification_importance_high">High: Peek onto the screen and allow sound and allow sound</string>
+ <string name="notification_importance_high">High: Peek onto the screen and allow sound</string>
<!-- [CHAR LIMIT=100] Notification Importance slider: max importance level description -->
<string name="notification_importance_max">Urgent: Show at the top of the notifications list, peek onto the screen and allow sound</string>
@@ -6037,11 +6037,8 @@
<!-- [CHAR LIMIT=NONE] App notification settings: Override DND option description-->
<string name="app_notification_override_dnd_summary">Let these notifications continue to interrupt when Do Not Disturb is set to Priority Only</string>
- <!-- [CHAR LIMIT=NONE] App notification settings: Sensitive option title -->
- <string name="app_notification_sensitive_title">Hide sensitive content</string>
-
- <!-- [CHAR LIMIT=NONE] App notification settings: Sensitive option description-->
- <string name="app_notification_sensitive_summary">When the device is locked, hide content in these notifications that might reveal private information</string>
+ <!-- [CHAR LIMIT=NONE] App notification settings: Visibility override option title -->
+ <string name="app_notification_visibility_override_title">On the lock screen</string>
<!-- [CHAR LIMIT=20] Notification settings: App notifications row summary when banned -->
<string name="app_notification_row_banned">Blocked</string>
@@ -6437,6 +6434,8 @@
<string name="notifications_enabled">Normal</string>
<!-- App notification summary with notifications disabled [CHAR LIMIT=40] -->
<string name="notifications_disabled">Blocked</string>
+ <!-- App notification summary with notifications disabled [CHAR LIMIT=40] -->
+ <string name="notifications_silenced">Silenced</string>
<!-- App notification summary with 2 items [CHAR LIMIT=15] -->
<string name="notifications_two_items"><xliff:g id="notif_state" example="Priority">%1$s</xliff:g> / <xliff:g id="notif_state" example="Priority">%2$s</xliff:g></string>
<!-- App notification summary with 3 items [CHAR LIMIT=15] -->
@@ -6479,6 +6478,14 @@
<string name="filter_notif_blocked_apps">Blocked</string>
<!-- Label for showing apps with domain URLs (data URI with http or https) in list [CHAR LIMIT=30] -->
<string name="filter_with_domain_urls_apps">With domain URLs</string>
+ <!-- Label for showing apps with priority notifications in list [CHAR LIMIT=30] -->
+ <string name="filter_notif_priority_apps">Overrides Do Not Disturb</string>
+ <!-- Label for showing apps redacting sensitive notifications in list [CHAR LIMIT=30] -->
+ <string name="filter_notif_sensitive_apps">No sensitive content on lock screen</string>
+ <!-- Label for showing apps hiding notifications from lockscreen [CHAR LIMIT=30] -->
+ <string name="filter_notif_hide_notifications_apps">Never shown on lock screen</string>
+ <!-- Filter label for apps that the user has silenced [CHAR LIMIT=40] -->
+ <string name="filter_notif_silent">Shown silently</string>
<!-- Title for advanced application management settings [CHAR LIMIT=30] -->
<string name="advanced_apps">Advanced</string>
@@ -6974,6 +6981,12 @@
<!-- Summary of data usage [CHAR LIMIT=NONE] -->
<string name="data_usage_summary_format"><xliff:g id="amount" example="50%">%1$s</xliff:g> of data used</string>
+ <!-- Summary of notifications [CHAR LIMIT=NONE] -->
+ <string name="notification_summary"><xliff:g id="count" example="24">%1$d</xliff:g> apps blocked from sending</string>
+
+ <!-- Summary of notifications when no apps are blocked [CHAR LIMIT=NONE] -->
+ <string name="notification_summary_none">All apps allowed to send</string>
+
<!-- Summary of apps [CHAR LIMIT=NONE] -->
<string name="apps_summary"><xliff:g id="count" example="24">%1$d</xliff:g> apps installed</string>
<!-- Example summary of apps used in Setup Wizard preview screen [CHAR LIMIT=NONE] -->
diff --git a/res/xml/app_notification_settings.xml b/res/xml/app_notification_settings.xml
index 37c4426..8bd0c88 100644
--- a/res/xml/app_notification_settings.xml
+++ b/res/xml/app_notification_settings.xml
@@ -45,11 +45,10 @@
android:layout="@layout/two_buttons_panel"
android:order="6" />
- <!-- Sensitive -->
- <com.android.settingslib.RestrictedSwitchPreference
- android:key="sensitive"
- android:title="@string/app_notification_sensitive_title"
- android:summary="@string/app_notification_sensitive_summary"
+ <!-- Visibility Override -->
+ <DropDownPreference
+ android:key="visibility_override"
+ android:title="@string/app_notification_visibility_override_title"
android:order="7" />
<!-- Bypass DND -->
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 3f69a36..8dafd74 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -61,6 +61,7 @@
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 @@
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/Utils.java b/src/com/android/settings/Utils.java
index e719291..5a76bf3 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -48,6 +48,8 @@
import android.net.Uri;
import android.os.BatteryManager;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.HandlerThread;
import android.os.IBinder;
import android.os.INetworkManagementService;
import android.os.RemoteException;
@@ -1045,10 +1047,18 @@
}
public static List<String> getNonIndexable(int xml, Context context) {
- List<String> ret = new ArrayList<>();
- PreferenceManager manager = new PreferenceManager(context);
- PreferenceScreen screen = manager.inflateFromResource(context, xml, null);
- checkPrefs(screen, ret);
+ HandlerThread thread = new HandlerThread("Index_" + xml);
+ thread.start();
+ final List<String> ret = new ArrayList<>();
+ new Handler(thread.getLooper()).post(new Runnable() {
+ @Override
+ public void run() {
+ PreferenceManager manager = new PreferenceManager(context);
+ PreferenceScreen screen = manager.inflateFromResource(context, xml, null);
+ checkPrefs(screen, ret);
+ }
+ });
+ thread.quitSafely();
return ret;
}
diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
index 0d580ba..7e7f4d6 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
@@ -17,25 +17,45 @@
package com.android.settings.accessibility;
import android.app.Fragment;
+import android.app.FragmentTransaction;
import android.os.Bundle;
-import android.support.v4.widget.DrawerLayout;
import android.text.TextUtils;
import android.view.Menu;
-import android.view.MenuItem;
+import android.view.View;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment;
+import com.android.setupwizardlib.util.SystemBarHelper;
+import com.android.setupwizardlib.view.NavigationBar;
public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivity {
-
@Override
protected void onCreate(Bundle savedState) {
super.onCreate(savedState);
getActionBar().setDisplayHomeAsUpEnabled(true);
setIsDrawerPresent(false);
+
+ // Hide System Nav Bar
+ SystemBarHelper.hideSystemBars(getWindow());
+
+ // Show SUW Nav Bar
+ setContentView(R.layout.accessibility_settings_for_suw);
+ NavigationBar navigationBar = (NavigationBar) findViewById(R.id.suw_navigation_bar);
+ navigationBar.getNextButton().setVisibility(View.GONE);
+ navigationBar.setNavigationBarListener(new NavigationBar.NavigationBarListener() {
+ @Override
+ public void onNavigateBack() {
+ onNavigateUp();
+ }
+
+ @Override
+ public void onNavigateNext() {
+ // Do nothing. We don't show this button.
+ }
+ });
}
@Override
@@ -45,7 +65,7 @@
}
@Override
- public boolean onOptionsItemSelected(MenuItem item) {
+ public boolean onNavigateUp() {
onBackPressed();
return true;
}
@@ -53,13 +73,35 @@
@Override
public void startPreferencePanel(String fragmentClass, Bundle args, int titleRes,
CharSequence titleText, Fragment resultTo, int resultRequestCode) {
+ // Set the title.
if (!TextUtils.isEmpty(titleText)) {
setTitle(titleText);
} else if (titleRes > 0) {
setTitle(getString(titleRes));
}
+ // Start the new Fragment.
args.putInt(SettingsPreferenceFragment.HELP_URI_RESOURCE_KEY, 0);
startPreferenceFragment(Fragment.instantiate(this, fragmentClass, args), true);
}
+
+ /**
+ * Start a new fragment.
+ *
+ * @param fragment The fragment to start
+ * @param push If true, the current fragment will be pushed onto the back stack. If false,
+ * the current fragment will be replaced.
+ */
+ @Override
+ public void startPreferenceFragment(Fragment fragment, boolean push) {
+ FragmentTransaction transaction = getFragmentManager().beginTransaction();
+ transaction.replace(R.id.suw_main_content, fragment);
+ if (push) {
+ transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
+ transaction.addToBackStack(BACK_STACK_PREFS);
+ } else {
+ transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
+ }
+ transaction.commitAllowingStateLoss();
+ }
}
diff --git a/src/com/android/settings/applications/AppStateNotificationBridge.java b/src/com/android/settings/applications/AppStateNotificationBridge.java
index f1f0896..39b502c 100644
--- a/src/com/android/settings/applications/AppStateNotificationBridge.java
+++ b/src/com/android/settings/applications/AppStateNotificationBridge.java
@@ -15,7 +15,9 @@
*/
package com.android.settings.applications;
+import android.app.Notification;
import android.content.pm.PackageManager;
+import android.service.notification.NotificationListenerService;
import com.android.settings.notification.NotificationBackend;
import com.android.settings.notification.NotificationBackend.AppRow;
@@ -63,11 +65,62 @@
@Override
public boolean filterApp(AppEntry info) {
+ if (info.extraInfo instanceof AppRow) {
+ AppRow row = (AppRow) info.extraInfo;
+ return row.banned;
+ }
+ return false;
+ }
+ };
+
+ public static final AppFilter FILTER_APP_NOTIFICATION_SILENCED = new AppFilter() {
+ @Override
+ public void init() {
+ }
+
+ @Override
+ public boolean filterApp(AppEntry info) {
if (info == null) {
return false;
}
AppRow row = (AppRow) info.extraInfo;
- return row.banned;
+ return row.appImportance > NotificationListenerService.Ranking.IMPORTANCE_NONE
+ && row.appImportance < NotificationListenerService.Ranking.IMPORTANCE_DEFAULT;
+ }
+ };
+
+ public static final AppFilter FILTER_APP_NOTIFICATION_PRIORITY = new AppFilter() {
+ @Override
+ public void init() {
+ }
+
+ @Override
+ public boolean filterApp(AppEntry info) {
+ return info.extraInfo != null && ((AppRow) info.extraInfo).appBypassDnd;
+ }
+ };
+
+ public static final AppFilter FILTER_APP_NOTIFICATION_HIDE_SENSITIVE = new AppFilter() {
+ @Override
+ public void init() {
+ }
+
+ @Override
+ public boolean filterApp(AppEntry info) {
+ return info.extraInfo != null
+ && ((AppRow) info.extraInfo).appVisOverride == Notification.VISIBILITY_PRIVATE;
+ }
+ };
+
+ public static final AppFilter FILTER_APP_NOTIFICATION_HIDE_ALL = new AppFilter() {
+ @Override
+ public void init() {
+ }
+
+ @Override
+ public boolean filterApp(AppEntry info) {
+ return info.extraInfo != null
+ && ((AppRow) info.extraInfo).appVisOverride == Notification.VISIBILITY_SECRET;
}
};
}
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 8a9c119..2eaa76f 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -50,6 +50,7 @@
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.UserManager;
+import android.service.notification.NotificationListenerService;
import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceClickListener;
import android.support.v7.preference.PreferenceCategory;
@@ -1007,8 +1008,11 @@
public static CharSequence getNotificationSummary(AppRow appRow, Context context) {
if (appRow.banned) {
return context.getString(R.string.notifications_disabled);
+ } else if (appRow.appImportance > NotificationListenerService.Ranking.IMPORTANCE_NONE
+ && appRow.appImportance < NotificationListenerService.Ranking.IMPORTANCE_DEFAULT) {
+ return context.getString(R.string.notifications_silenced);
}
- return context.getString(R.string.notifications_enabled);
+ return "";
}
private class MemoryUpdater extends AsyncTask<Void, Void, ProcStatsPackageEntry> {
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index f88a8ae..56661b4 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -126,12 +126,16 @@
public static final int FILTER_APPS_ENABLED = 3;
public static final int FILTER_APPS_DISABLED = 4;
public static final int FILTER_APPS_BLOCKED = 5;
- public static final int FILTER_APPS_PERSONAL = 6;
- public static final int FILTER_APPS_WORK = 7;
- public static final int FILTER_APPS_WITH_DOMAIN_URLS = 8;
- public static final int FILTER_APPS_USAGE_ACCESS = 9;
- public static final int FILTER_APPS_WITH_OVERLAY = 10;
- public static final int FILTER_APPS_WRITE_SETTINGS = 11;
+ public static final int FILTER_APPS_SILENT = 6;
+ public static final int FILTER_APPS_SENSITIVE = 7;
+ public static final int FILTER_APPS_HIDE_NOTIFICATIONS = 8;
+ public static final int FILTER_APPS_PRIORITY = 9;
+ public static final int FILTER_APPS_PERSONAL = 10;
+ public static final int FILTER_APPS_WORK = 11;
+ public static final int FILTER_APPS_WITH_DOMAIN_URLS = 12;
+ public static final int FILTER_APPS_USAGE_ACCESS = 13;
+ public static final int FILTER_APPS_WITH_OVERLAY = 14;
+ public static final int FILTER_APPS_WRITE_SETTINGS = 15;
// This is the string labels for the filter modes above, the order must be kept in sync.
public static final int[] FILTER_LABELS = new int[]{
@@ -141,6 +145,10 @@
R.string.filter_enabled_apps, // Enabled
R.string.filter_apps_disabled, // Disabled
R.string.filter_notif_blocked_apps, // Blocked Notifications
+ R.string.filter_notif_silent, // Silenced Notifications
+ R.string.filter_notif_sensitive_apps, // Sensitive Notifications
+ R.string.filter_notif_hide_notifications_apps, // Sensitive Notifications
+ R.string.filter_notif_priority_apps, // Priority Notifications
R.string.filter_personal_apps, // Personal
R.string.filter_work_apps, // Work
R.string.filter_with_domain_urls_apps, // Domain URLs
@@ -159,6 +167,10 @@
ApplicationsState.FILTER_ALL_ENABLED, // Enabled
ApplicationsState.FILTER_DISABLED, // Disabled
AppStateNotificationBridge.FILTER_APP_NOTIFICATION_BLOCKED, // Blocked Notifications
+ AppStateNotificationBridge.FILTER_APP_NOTIFICATION_SILENCED, // Silenced Notifications
+ AppStateNotificationBridge.FILTER_APP_NOTIFICATION_HIDE_SENSITIVE, // Sensitive Notifications
+ AppStateNotificationBridge.FILTER_APP_NOTIFICATION_HIDE_ALL, // Hide all Notifications
+ AppStateNotificationBridge.FILTER_APP_NOTIFICATION_PRIORITY, // Priority Notifications
ApplicationsState.FILTER_PERSONAL, // Personal
ApplicationsState.FILTER_WORK, // Work
ApplicationsState.FILTER_WITH_DOMAIN_URLS, // Apps with Domain URLs
@@ -343,6 +355,10 @@
}
if (mListType == LIST_TYPE_NOTIFICATION) {
mFilterAdapter.enableFilter(FILTER_APPS_BLOCKED);
+ mFilterAdapter.enableFilter(FILTER_APPS_SILENT);
+ mFilterAdapter.enableFilter(FILTER_APPS_SENSITIVE);
+ mFilterAdapter.enableFilter(FILTER_APPS_HIDE_NOTIFICATIONS);
+ mFilterAdapter.enableFilter(FILTER_APPS_PRIORITY);
}
if (mListType == LIST_TYPE_HIGH_POWER) {
mFilterAdapter.enableFilter(FILTER_APPS_POWER_WHITELIST_ALL);
diff --git a/src/com/android/settings/applications/NotificationApps.java b/src/com/android/settings/applications/NotificationApps.java
new file mode 100644
index 0000000..05b450d
--- /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<AppEntry> 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<AppEntry> 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);
+ }
+ };
+}
diff --git a/src/com/android/settings/dashboard/SummaryLoader.java b/src/com/android/settings/dashboard/SummaryLoader.java
index a94ae83..5019844 100644
--- a/src/com/android/settings/dashboard/SummaryLoader.java
+++ b/src/com/android/settings/dashboard/SummaryLoader.java
@@ -63,7 +63,7 @@
}
public void release() {
- mWorkerThread.quit();
+ mWorkerThread.quitSafely();
}
public void setAdapter(DashboardAdapter adapter) {
diff --git a/src/com/android/settings/datausage/DataSaverSummary.java b/src/com/android/settings/datausage/DataSaverSummary.java
index e8fb2fc..dc8f125 100644
--- a/src/com/android/settings/datausage/DataSaverSummary.java
+++ b/src/com/android/settings/datausage/DataSaverSummary.java
@@ -70,6 +70,7 @@
public void onResume() {
super.onResume();
mDataSaverBackend.refreshWhitelist();
+ mDataSaverBackend.addListener(this);
mSession.resume();
mDataUsageBridge.resume();
}
@@ -77,6 +78,7 @@
@Override
public void onPause() {
super.onPause();
+ mDataSaverBackend.remListener(this);
mDataUsageBridge.pause();
mSession.pause();
}
diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index c82ad19..f393300 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -24,8 +24,8 @@
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.os.UserHandle;
-import android.provider.Settings;
import android.service.notification.NotificationListenerService.Ranking;
+import android.support.v7.preference.DropDownPreference;
import android.util.ArrayMap;
import android.util.Log;
@@ -76,8 +76,9 @@
mImportanceTitle = (RestrictedPreference) findPreference(KEY_IMPORTANCE_TITLE);
mPriority =
(RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_BYPASS_DND);
- mSensitive =
- (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_SENSITIVE);
+ mVisibilityOverride =
+ (DropDownPreference) getPreferenceScreen().findPreference(
+ KEY_VISIBILITY_OVERRIDE);
mBlock = (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_BLOCK);
mSilent = (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_SILENT);
@@ -94,7 +95,7 @@
setupImportancePrefs(mAppRow.systemApp, mAppRow.appImportance, mAppRow.banned);
setupPriorityPref(mAppRow.appBypassDnd);
- setupSensitivePref(mAppRow.appSensitive);
+ setupVisOverridePref(mAppRow.appVisOverride);
updateDependents(mAppRow.appImportance);
}
@@ -102,8 +103,6 @@
protected void updateDependents(int importance) {
final boolean lockscreenSecure = new LockPatternUtils(getActivity()).isSecure(
UserHandle.myUserId());
- final boolean lockscreenNotificationsEnabled = getLockscreenNotificationsEnabled();
- final boolean allowPrivate = getLockscreenAllowPrivateNotifications();
if (getPreferenceScreen().findPreference(mBlock.getKey()) != null) {
setVisible(mSilent, checkCanBeVisible(Ranking.IMPORTANCE_MIN, importance));
@@ -111,8 +110,8 @@
}
setVisible(mPriority, checkCanBeVisible(Ranking.IMPORTANCE_DEFAULT, importance)
&& !mDndVisualEffectsSuppressed);
- setVisible(mSensitive, checkCanBeVisible(Ranking.IMPORTANCE_MIN, importance)
- && lockscreenSecure && lockscreenNotificationsEnabled && allowPrivate);
+ setVisible(mVisibilityOverride,
+ checkCanBeVisible(Ranking.IMPORTANCE_MIN, importance) && lockscreenSecure);
}
protected boolean checkCanBeVisible(int minImportanceVisible, int importance) {
@@ -122,16 +121,6 @@
return importance >= minImportanceVisible;
}
- private boolean getLockscreenNotificationsEnabled() {
- return Settings.Secure.getInt(getContentResolver(),
- Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, 0) != 0;
- }
-
- private boolean getLockscreenAllowPrivateNotifications() {
- return Settings.Secure.getInt(getContentResolver(),
- Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 0) != 0;
- }
-
private List<ResolveInfo> queryNotificationConfigActivities() {
if (DEBUG) Log.d(TAG, "APP_NOTIFICATION_PREFS_CATEGORY_INTENT is "
+ APP_NOTIFICATION_PREFS_CATEGORY_INTENT);
diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java
index 772fa19..c418769 100644
--- a/src/com/android/settings/notification/NotificationBackend.java
+++ b/src/com/android/settings/notification/NotificationBackend.java
@@ -48,7 +48,7 @@
row.banned = getNotificationsBanned(row.pkg, row.uid);
row.appImportance = getImportance(row.pkg, row.uid);
row.appBypassDnd = getBypassZenMode(row.pkg, row.uid);
- row.appSensitive = getSensitive(row.pkg, row.uid);
+ row.appVisOverride = getVisibilityOverride(row.pkg, row.uid);
return row;
}
@@ -88,20 +88,18 @@
}
}
- public boolean getSensitive(String pkg, int uid) {
+ public int getVisibilityOverride(String pkg, int uid) {
try {
- return sINM.getVisibilityOverride(pkg, uid) == Notification.VISIBILITY_PRIVATE;
+ return sINM.getVisibilityOverride(pkg, uid);
} catch (Exception e) {
Log.w(TAG, "Error calling NoMan", e);
- return false;
+ return NotificationListenerService.Ranking.VISIBILITY_NO_OVERRIDE;
}
}
- public boolean setSensitive(String pkg, int uid, boolean sensitive) {
+ public boolean setVisibilityOverride(String pkg, int uid, int override) {
try {
- sINM.setVisibilityOverride(pkg, uid,
- sensitive ? Notification.VISIBILITY_PRIVATE
- : NotificationListenerService.Ranking.VISIBILITY_NO_OVERRIDE);
+ sINM.setVisibilityOverride(pkg, uid, override);
return true;
} catch (Exception e) {
Log.w(TAG, "Error calling NoMan", e);
@@ -143,6 +141,6 @@
public boolean systemApp;
public int appImportance;
public boolean appBypassDnd;
- public boolean appSensitive;
+ public int appVisOverride;
}
}
diff --git a/src/com/android/settings/notification/NotificationSettingsBase.java b/src/com/android/settings/notification/NotificationSettingsBase.java
index ee0cac0..314c2f8 100644
--- a/src/com/android/settings/notification/NotificationSettingsBase.java
+++ b/src/com/android/settings/notification/NotificationSettingsBase.java
@@ -34,6 +34,7 @@
import android.os.UserHandle;
import android.provider.Settings;
import android.service.notification.NotificationListenerService.Ranking;
+import android.support.v7.preference.DropDownPreference;
import android.support.v7.preference.Preference;
import android.text.TextUtils;
import android.util.Log;
@@ -41,6 +42,8 @@
import android.widget.Button;
import android.widget.Toast;
+import java.util.ArrayList;
+
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
abstract public class NotificationSettingsBase extends SettingsPreferenceFragment {
@@ -49,7 +52,7 @@
private static final String TUNER_SETTING = "show_importance_slider";
protected static final String KEY_BYPASS_DND = "bypass_dnd";
- protected static final String KEY_SENSITIVE = "sensitive";
+ protected static final String KEY_VISIBILITY_OVERRIDE = "visibility_override";
protected static final String KEY_IMPORTANCE = "importance";
protected static final String KEY_IMPORTANCE_TITLE = "importance_title";
protected static final String KEY_IMPORTANCE_RESET = "importance_reset_button";
@@ -68,7 +71,7 @@
protected RestrictedPreference mImportanceTitle;
protected LayoutPreference mImportanceReset;
protected RestrictedSwitchPreference mPriority;
- protected RestrictedSwitchPreference mSensitive;
+ protected DropDownPreference mVisibilityOverride;
protected RestrictedSwitchPreference mBlock;
protected RestrictedSwitchPreference mSilent;
protected EnforcedAdmin mSuspendedAppsAdmin;
@@ -144,9 +147,6 @@
if (mPriority != null) {
mPriority.setDisabledByAdmin(mSuspendedAppsAdmin);
}
- if (mSensitive != null) {
- mSensitive.setDisabledByAdmin(mSuspendedAppsAdmin);
- }
if (mImportanceTitle != null) {
mImportanceTitle.setDisabledByAdmin(mSuspendedAppsAdmin);
}
@@ -273,18 +273,62 @@
});
}
- protected void setupSensitivePref(boolean sensitive) {
- mSensitive.setDisabledByAdmin(mSuspendedAppsAdmin);
- mSensitive.setChecked(sensitive);
- mSensitive.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ protected void setupVisOverridePref(int sensitive) {
+ ArrayList<CharSequence> entries = new ArrayList<>();
+ ArrayList<CharSequence> values = new ArrayList<>();
+
+ if (getLockscreenNotificationsEnabled() && getLockscreenAllowPrivateNotifications()) {
+ entries.add(getString(R.string.lock_screen_notifications_summary_show));
+ values.add(Integer.toString(Ranking.VISIBILITY_NO_OVERRIDE));
+ }
+
+ entries.add(getString(R.string.lock_screen_notifications_summary_hide));
+ values.add(Integer.toString(Notification.VISIBILITY_PRIVATE));
+ entries.add(getString(R.string.lock_screen_notifications_summary_disable));
+ values.add(Integer.toString(Notification.VISIBILITY_SECRET));
+ mVisibilityOverride.setEntries(entries.toArray(new CharSequence[entries.size()]));
+ mVisibilityOverride.setEntryValues(values.toArray(new CharSequence[values.size()]));
+
+ if (sensitive == Ranking.VISIBILITY_NO_OVERRIDE) {
+ mVisibilityOverride.setValue(Integer.toString(getGlobalVisibility()));
+ } else {
+ mVisibilityOverride.setValue(Integer.toString(sensitive));
+ }
+ mVisibilityOverride.setSummary("%s");
+
+ mVisibilityOverride.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
- final boolean sensitive = (Boolean) newValue;
- return mBackend.setSensitive(mPkgInfo.packageName, mUid, sensitive);
+ int sensitive = Integer.parseInt((String) newValue);
+ if (sensitive == getGlobalVisibility()) {
+ sensitive = Ranking.VISIBILITY_NO_OVERRIDE;
+ }
+ mBackend.setVisibilityOverride(mPkgInfo.packageName, mUid, sensitive);
+ return true;
}
});
}
+ private int getGlobalVisibility() {
+ int globalVis = Ranking.VISIBILITY_NO_OVERRIDE;
+ if (!getLockscreenNotificationsEnabled()) {
+ globalVis = Notification.VISIBILITY_SECRET;
+ } else if (!getLockscreenAllowPrivateNotifications()) {
+ globalVis = Notification.VISIBILITY_PRIVATE;
+ }
+ return globalVis;
+ }
+
+ protected boolean getLockscreenNotificationsEnabled() {
+ return Settings.Secure.getInt(getContentResolver(),
+ Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, 0) != 0;
+ }
+
+ protected boolean getLockscreenAllowPrivateNotifications() {
+ return Settings.Secure.getInt(getContentResolver(),
+ Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 0) != 0;
+ }
+
abstract void updateDependents(int progress);
protected void setVisible(Preference p, boolean visible) {
diff --git a/src/com/android/settings/search/Ranking.java b/src/com/android/settings/search/Ranking.java
index 94b010c..80eb6d4 100644
--- a/src/com/android/settings/search/Ranking.java
+++ b/src/com/android/settings/search/Ranking.java
@@ -21,13 +21,11 @@
import com.android.settings.DevelopmentSettings;
import com.android.settings.DeviceInfoSettings;
import com.android.settings.DisplaySettings;
-import com.android.settings.HomeSettings;
import com.android.settings.LegalSettings;
import com.android.settings.PrivacySettings;
import com.android.settings.ScreenPinningSettings;
import com.android.settings.SecuritySettings;
import com.android.settings.WallpaperTypeSettings;
-import com.android.settings.WifiCallingSettings;
import com.android.settings.WirelessSettings;
import com.android.settings.accessibility.AccessibilitySettings;
import com.android.settings.accounts.AccountSettings;
@@ -69,25 +67,24 @@
public static final int RANK_SIM = 3;
public static final int RANK_DATA_USAGE = 4;
public static final int RANK_WIRELESS = 5;
- public static final int RANK_HOME = 6;
- public static final int RANK_DISPLAY = 7;
- public static final int RANK_WALLPAPER = 8;
- public static final int RANK_NOTIFICATIONS = 9;
- public static final int RANK_SOUND = 10;
- public static final int RANK_APPS = 11;
- public static final int RANK_STORAGE = 12;
- public static final int RANK_POWER_USAGE = 13;
- public static final int RANK_USERS = 14;
- public static final int RANK_LOCATION = 15;
- public static final int RANK_SECURITY = 16;
- public static final int RANK_ACCOUNT = 17;
- public static final int RANK_IME = 18;
- public static final int RANK_PRIVACY = 19;
- public static final int RANK_DATE_TIME = 20;
- public static final int RANK_ACCESSIBILITY = 21;
- public static final int RANK_PRINTING = 22;
- public static final int RANK_DEVELOPEMENT = 23;
- public static final int RANK_DEVICE_INFO = 24;
+ public static final int RANK_DISPLAY = 6;
+ public static final int RANK_WALLPAPER = 7;
+ public static final int RANK_NOTIFICATIONS = 8;
+ public static final int RANK_SOUND = 9;
+ public static final int RANK_APPS = 10;
+ public static final int RANK_STORAGE = 11;
+ public static final int RANK_POWER_USAGE = 12;
+ public static final int RANK_USERS = 13;
+ public static final int RANK_LOCATION = 14;
+ public static final int RANK_SECURITY = 15;
+ public static final int RANK_ACCOUNT = 16;
+ public static final int RANK_IME = 17;
+ public static final int RANK_PRIVACY = 18;
+ public static final int RANK_DATE_TIME = 19;
+ public static final int RANK_ACCESSIBILITY = 20;
+ public static final int RANK_PRINTING = 21;
+ public static final int RANK_DEVELOPEMENT = 22;
+ public static final int RANK_DEVICE_INFO = 23;
public static final int RANK_UNDEFINED = -1;
public static final int RANK_OTHERS = 1024;
@@ -117,9 +114,6 @@
// Other wireless settinfs
sRankMap.put(WirelessSettings.class.getName(), RANK_WIRELESS);
- // Home
- sRankMap.put(HomeSettings.class.getName(), RANK_HOME);
-
// Display
sRankMap.put(DisplaySettings.class.getName(), RANK_DISPLAY);
sRankMap.put(ScreenZoomSettings.class.getName(), RANK_WIFI);
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 73784b2..08a0d0c 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -21,14 +21,12 @@
import com.android.settings.DevelopmentSettings;
import com.android.settings.DeviceInfoSettings;
import com.android.settings.DisplaySettings;
-import com.android.settings.HomeSettings;
import com.android.settings.LegalSettings;
import com.android.settings.PrivacySettings;
import com.android.settings.R;
import com.android.settings.ScreenPinningSettings;
import com.android.settings.SecuritySettings;
import com.android.settings.WallpaperTypeSettings;
-import com.android.settings.WifiCallingSettings;
import com.android.settings.WirelessSettings;
import com.android.settings.accessibility.AccessibilitySettings;
import com.android.settings.accounts.AccountSettings;
@@ -124,13 +122,6 @@
WirelessSettings.class.getName(),
R.drawable.ic_settings_more));
- sResMap.put(HomeSettings.class.getName(),
- new SearchIndexableResource(
- Ranking.getRankForClassName(HomeSettings.class.getName()),
- NO_DATA_RES_ID,
- HomeSettings.class.getName(),
- R.drawable.ic_settings_home));
-
sResMap.put(ScreenZoomSettings.class.getName(),
new SearchIndexableResource(
Ranking.getRankForClassName(ScreenZoomSettings.class.getName()),
diff --git a/src/com/android/settings/users/UserPreference.java b/src/com/android/settings/users/UserPreference.java
index eff8b9a..1f24018 100644
--- a/src/com/android/settings/users/UserPreference.java
+++ b/src/com/android/settings/users/UserPreference.java
@@ -71,7 +71,7 @@
OnClickListener deleteListener) {
super(context, attrs);
if (deleteListener != null || settingsListener != null) {
- setWidgetLayoutResource(R.layout.preference_user_delete_widget);
+ setWidgetLayoutResource(R.layout.restricted_preference_user_delete_widget);
}
mDeleteClickListener = deleteListener;
mSettingsClickListener = settingsListener;
@@ -89,37 +89,42 @@
@Override
public void onBindViewHolder(PreferenceViewHolder view) {
- UserManager um = (UserManager) getContext().getSystemService(Context.USER_SERVICE);
- View deleteDividerView = view.findViewById(R.id.divider_delete);
- View manageDividerView = view.findViewById(R.id.divider_manage);
- View deleteView = view.findViewById(R.id.trash_user);
- if (deleteView != null) {
- if (mDeleteClickListener != null
- && !um.hasUserRestriction(UserManager.DISALLOW_REMOVE_USER)) {
- deleteView.setOnClickListener(mDeleteClickListener);
- deleteView.setTag(this);
- } else {
- deleteView.setVisibility(View.GONE);
- deleteDividerView.setVisibility(View.GONE);
- }
- }
+ super.onBindViewHolder(view);
final boolean disabledByAdmin = isDisabledByAdmin();
- ImageView manageView = (ImageView) view.findViewById(R.id.manage_user);
- if (manageView != null) {
- if (mSettingsClickListener != null) {
- manageView.setOnClickListener(mSettingsClickListener);
- manageView.setTag(this);
- if (mDeleteClickListener != null) {
+ dimIcon(disabledByAdmin);
+ View userDeleteWidget = view.findViewById(R.id.user_delete_widget);
+ if (userDeleteWidget != null) {
+ userDeleteWidget.setVisibility(disabledByAdmin ? View.GONE : View.VISIBLE);
+ }
+ if (!disabledByAdmin) {
+ UserManager um = (UserManager) getContext().getSystemService(Context.USER_SERVICE);
+ View deleteDividerView = view.findViewById(R.id.divider_delete);
+ View manageDividerView = view.findViewById(R.id.divider_manage);
+ View deleteView = view.findViewById(R.id.trash_user);
+ if (deleteView != null) {
+ if (mDeleteClickListener != null
+ && !um.hasUserRestriction(UserManager.DISALLOW_REMOVE_USER)) {
+ deleteView.setOnClickListener(mDeleteClickListener);
+ deleteView.setTag(this);
+ } else {
+ deleteView.setVisibility(View.GONE);
+ deleteDividerView.setVisibility(View.GONE);
+ }
+ }
+ ImageView manageView = (ImageView) view.findViewById(R.id.manage_user);
+ if (manageView != null) {
+ if (mSettingsClickListener != null) {
+ manageView.setOnClickListener(mSettingsClickListener);
+ manageView.setTag(this);
+ if (mDeleteClickListener != null) {
+ manageDividerView.setVisibility(View.GONE);
+ }
+ } else {
+ manageView.setVisibility(View.GONE);
manageDividerView.setVisibility(View.GONE);
}
- } else {
- manageView.setVisibility(View.GONE);
- manageDividerView.setVisibility(View.GONE);
}
- manageView.setImageAlpha(disabledByAdmin ? ALPHA_DISABLED : ALPHA_ENABLED);
}
- super.onBindViewHolder(view);
- dimIcon(disabledByAdmin);
}
private int getSerialNumber() {