diff --git a/res/drawable/ic_info.xml b/res/drawable/ic_info.xml
new file mode 100644
index 00000000000..13d00a41da9
--- /dev/null
+++ b/res/drawable/ic_info.xml
@@ -0,0 +1,24 @@
+
+
+
+
diff --git a/res/layout/app_header.xml b/res/layout/app_header.xml
index d9453f49b14..ffc68296309 100644
--- a/res/layout/app_header.xml
+++ b/res/layout/app_header.xml
@@ -50,7 +50,7 @@
android:minWidth="0dp"
android:contentDescription="@string/notification_app_settings_button"
android:scaleType="center"
- android:src="@drawable/ic_settings_32dp"
+ android:src="@drawable/ic_info"
style="?android:attr/borderlessButtonStyle" />
No battery use since last full charge
+
+ App notification preferences
+
diff --git a/res/xml/app_notification_settings.xml b/res/xml/app_notification_settings.xml
index 9aebb39c3e7..b7557b27956 100644
--- a/res/xml/app_notification_settings.xml
+++ b/res/xml/app_notification_settings.xml
@@ -50,4 +50,11 @@
android:order="4"
android:persistent="false" />
+
+
+
diff --git a/src/com/android/settings/applications/AppInfoWithHeader.java b/src/com/android/settings/applications/AppInfoWithHeader.java
index f8feaf16bad..5bfd79a4ddd 100644
--- a/src/com/android/settings/applications/AppInfoWithHeader.java
+++ b/src/com/android/settings/applications/AppInfoWithHeader.java
@@ -16,13 +16,19 @@
package com.android.settings.applications;
+import android.app.Fragment;
+import android.content.Intent;
+import android.net.Uri;
import android.os.Bundle;
+import android.provider.Settings;
import android.util.Log;
import com.android.settings.AppHeader;
public abstract class AppInfoWithHeader extends AppInfoBase {
+ public static final String EXTRA_HIDE_INFO_BUTTON = "hideInfoButton";
+
private boolean mCreated;
@Override
@@ -35,6 +41,24 @@ public abstract class AppInfoWithHeader extends AppInfoBase {
mCreated = true;
if (mPackageInfo == null) return;
AppHeader.createAppHeader(this, mPackageInfo.applicationInfo.loadIcon(mPm),
- mPackageInfo.applicationInfo.loadLabel(mPm), null, 0);
+ mPackageInfo.applicationInfo.loadLabel(mPm), getInfoIntent(this, mPackageName), 0);
+ }
+
+ public static Intent getInfoIntent(Fragment fragment, String packageName) {
+ Bundle args = fragment.getArguments();
+ Intent intent = fragment.getActivity().getIntent();
+ boolean showInfo = true;
+ if (args != null && args.getBoolean(EXTRA_HIDE_INFO_BUTTON, false)) {
+ showInfo = false;
+ }
+ if (intent != null && intent.getBooleanExtra(EXTRA_HIDE_INFO_BUTTON, false)) {
+ showInfo = false;
+ }
+ Intent infoIntent = null;
+ if (showInfo) {
+ infoIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+ infoIntent.setData(Uri.fromParts("package", packageName, null));
+ }
+ return infoIntent;
}
}
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index a6fee90a9dc..b9ea5fd2933 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -616,6 +616,7 @@ public class InstalledAppDetails extends AppInfoBase
// start new activity to manage app permissions
Intent intent = new Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS);
intent.putExtra(Intent.EXTRA_PACKAGE_NAME, mAppEntry.info.packageName);
+ intent.putExtra(AppInfoWithHeader.EXTRA_HIDE_INFO_BUTTON, true);
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
@@ -627,6 +628,7 @@ public class InstalledAppDetails extends AppInfoBase
// start new fragment to display extended information
Bundle args = new Bundle();
args.putString(InstalledAppDetails.ARG_PACKAGE_NAME, mAppEntry.info.packageName);
+ args.putBoolean(AppInfoWithHeader.EXTRA_HIDE_INFO_BUTTON, true);
SettingsActivity sa = (SettingsActivity) getActivity();
sa.startPreferencePanel(fragment.getName(), args, -1, title, this, SUB_INFO_FRAGMENT);
@@ -636,6 +638,7 @@ public class InstalledAppDetails extends AppInfoBase
// start new fragment to display extended information
getActivity().startActivity(new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
+ .putExtra(AppInfoWithHeader.EXTRA_HIDE_INFO_BUTTON, true)
.putExtra(Settings.EXTRA_APP_PACKAGE, mAppEntry.info.packageName)
.putExtra(Settings.EXTRA_APP_UID, mAppEntry.info.uid));
}
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index 3107efdfea0..33585be4915 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -429,10 +429,11 @@ public class ManageApplications extends InstrumentedFragment
Activity activity = getActivity();
switch (mListType) {
case LIST_TYPE_NOTIFICATION:
- activity.startActivity(new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
+ activity.startActivityAsUser(new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
.putExtra(Settings.EXTRA_APP_PACKAGE, mCurrentPkgName)
- .putExtra(Settings.EXTRA_APP_UID, mCurrentUid));
+ .putExtra(Settings.EXTRA_APP_UID, mCurrentUid),
+ new UserHandle(UserHandle.getUserId(mCurrentUid)));
break;
case LIST_TYPE_DOMAINS_URLS:
startAppInfoFragment(AppLaunchSettings.class, R.string.auto_launch_label);
diff --git a/src/com/android/settings/applications/ProcessStatsDetail.java b/src/com/android/settings/applications/ProcessStatsDetail.java
index 55538bc99ae..258a7f2e420 100644
--- a/src/com/android/settings/applications/ProcessStatsDetail.java
+++ b/src/com/android/settings/applications/ProcessStatsDetail.java
@@ -114,7 +114,7 @@ public class ProcessStatsDetail extends SettingsPreferenceFragment
AppHeader.createAppHeader(this,
mApp.mUiTargetApp != null ? mApp.mUiTargetApp.loadIcon(mPm) : new ColorDrawable(0),
- mApp.mUiLabel, null);
+ mApp.mUiLabel, AppInfoWithHeader.getInfoIntent(this, mApp.mPackage));
}
@Override
diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
index bac82022155..63ca1a4a45d 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
@@ -54,6 +54,7 @@ import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
import com.android.settings.WirelessSettings;
import com.android.settings.applications.AppInfoBase;
+import com.android.settings.applications.AppInfoWithHeader;
import com.android.settings.applications.InstalledAppDetails;
import com.android.settings.applications.LayoutPreference;
import com.android.settings.bluetooth.BluetoothSettings;
@@ -464,7 +465,8 @@ public class PowerUsageDetail extends PowerUsageBase implements Button.OnClickLi
appIcon = getActivity().getPackageManager().getDefaultActivityIcon();
}
- AppHeader.createAppHeader(this, appIcon, title, null,
+ AppHeader.createAppHeader(this, appIcon, title,
+ AppInfoWithHeader.getInfoIntent(this, iconPackage),
mDrainType != DrainType.APP ? android.R.color.white : 0);
}
diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index 28245c8c89d..52c011cc2b6 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -29,6 +29,7 @@ import android.os.Bundle;
import android.os.UserHandle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.Preference.OnPreferenceClickListener;
import android.preference.SwitchPreference;
import android.provider.Settings;
import android.text.TextUtils;
@@ -42,6 +43,7 @@ import com.android.settings.AppHeader;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
+import com.android.settings.applications.AppInfoWithHeader;
import com.android.settings.notification.NotificationBackend.AppRow;
import java.util.List;
@@ -55,6 +57,7 @@ public class AppNotificationSettings extends SettingsPreferenceFragment {
private static final String KEY_PRIORITY = "priority";
private static final String KEY_PEEKABLE = "peekable";
private static final String KEY_SENSITIVE = "sensitive";
+ private static final String KEY_APP_SETTINGS = "app_settings";
static final String EXTRA_HAS_SETTINGS_INTENT = "has_settings_intent";
static final String EXTRA_SETTINGS_INTENT = "settings_intent";
@@ -85,7 +88,7 @@ public class AppNotificationSettings extends SettingsPreferenceFragment {
mCreated = true;
if (mAppRow == null) return;
AppHeader.createAppHeader(this, mAppRow.icon, mAppRow.label,
- mAppRow.settingsIntent);
+ AppInfoWithHeader.getInfoIntent(this, mAppRow.pkg));
}
@Override
@@ -189,6 +192,19 @@ public class AppNotificationSettings extends SettingsPreferenceFragment {
return mBackend.setSensitive(pkg, uid, sensitive);
}
});
+
+ if (mAppRow.settingsIntent != null) {
+ findPreference(KEY_APP_SETTINGS).setOnPreferenceClickListener(
+ new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ mContext.startActivity(mAppRow.settingsIntent);
+ return true;
+ }
+ });
+ } else {
+ removePreference(KEY_APP_SETTINGS);
+ }
}
private void updateDependents(boolean banned) {