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) {