Button that goes from app info details to app info
This info button is shown on the header of all app detail pages. This button is hidden when coming from app info, to avoid allowing users to go in circles. Since app notification details had a settings button where the new info button goes, the app notification settings will move down to be a preference (this matches the usage access screen UX). Also fix a bug in launching app notification settings for managed profiles. Bug: 20633669 Change-Id: Idbb4f7c3326b4c6b0a19559b722ee0406eaba6c0
This commit is contained in:
24
res/drawable/ic_info.xml
Normal file
24
res/drawable/ic_info.xml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<!--
|
||||||
|
Copyright (C) 2015 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.
|
||||||
|
-->
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24.0dp"
|
||||||
|
android:height="24.0dp"
|
||||||
|
android:viewportWidth="24.0"
|
||||||
|
android:viewportHeight="24.0">
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFFFF"
|
||||||
|
android:pathData="M11.0,17.0l2.0,0.0l0.0,-6.0l-2.0,0.0l0.0,6.0zm1.0,-15.0C6.48,2.0 2.0,6.48 2.0,12.0s4.48,10.0 10.0,10.0 10.0,-4.48 10.0,-10.0S17.52,2.0 12.0,2.0zm0.0,18.0c-4.41,0.0 -8.0,-3.59 -8.0,-8.0s3.59,-8.0 8.0,-8.0 8.0,3.59 8.0,8.0 -3.59,8.0 -8.0,8.0zM11.0,9.0l2.0,0.0L13.0,7.0l-2.0,0.0l0.0,2.0z"/>
|
||||||
|
</vector>
|
@@ -50,7 +50,7 @@
|
|||||||
android:minWidth="0dp"
|
android:minWidth="0dp"
|
||||||
android:contentDescription="@string/notification_app_settings_button"
|
android:contentDescription="@string/notification_app_settings_button"
|
||||||
android:scaleType="center"
|
android:scaleType="center"
|
||||||
android:src="@drawable/ic_settings_32dp"
|
android:src="@drawable/ic_info"
|
||||||
style="?android:attr/borderlessButtonStyle" />
|
style="?android:attr/borderlessButtonStyle" />
|
||||||
|
|
||||||
<View
|
<View
|
||||||
|
@@ -6657,4 +6657,7 @@
|
|||||||
<!-- Summary for app with no battery usage [CHAR LIMIT=NONE] -->
|
<!-- Summary for app with no battery usage [CHAR LIMIT=NONE] -->
|
||||||
<string name="no_battery_summary" translatable="false">No battery use since last full charge</string>
|
<string name="no_battery_summary" translatable="false">No battery use since last full charge</string>
|
||||||
|
|
||||||
|
<!-- Link to an apps notification settings [CHAR LIMIT=50] -->
|
||||||
|
<string name="app_notification_preferences">App notification preferences</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -50,4 +50,11 @@
|
|||||||
android:order="4"
|
android:order="4"
|
||||||
android:persistent="false" />
|
android:persistent="false" />
|
||||||
|
|
||||||
|
<!-- App notification preferences -->
|
||||||
|
<Preference
|
||||||
|
android:key="app_settings"
|
||||||
|
android:title="@string/app_notification_preferences"
|
||||||
|
android:order="5"
|
||||||
|
android:persistent="false" />
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
@@ -16,13 +16,19 @@
|
|||||||
|
|
||||||
package com.android.settings.applications;
|
package com.android.settings.applications;
|
||||||
|
|
||||||
|
import android.app.Fragment;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.settings.AppHeader;
|
import com.android.settings.AppHeader;
|
||||||
|
|
||||||
public abstract class AppInfoWithHeader extends AppInfoBase {
|
public abstract class AppInfoWithHeader extends AppInfoBase {
|
||||||
|
|
||||||
|
public static final String EXTRA_HIDE_INFO_BUTTON = "hideInfoButton";
|
||||||
|
|
||||||
private boolean mCreated;
|
private boolean mCreated;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -35,6 +41,24 @@ public abstract class AppInfoWithHeader extends AppInfoBase {
|
|||||||
mCreated = true;
|
mCreated = true;
|
||||||
if (mPackageInfo == null) return;
|
if (mPackageInfo == null) return;
|
||||||
AppHeader.createAppHeader(this, mPackageInfo.applicationInfo.loadIcon(mPm),
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -616,6 +616,7 @@ public class InstalledAppDetails extends AppInfoBase
|
|||||||
// start new activity to manage app permissions
|
// start new activity to manage app permissions
|
||||||
Intent intent = new Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS);
|
Intent intent = new Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS);
|
||||||
intent.putExtra(Intent.EXTRA_PACKAGE_NAME, mAppEntry.info.packageName);
|
intent.putExtra(Intent.EXTRA_PACKAGE_NAME, mAppEntry.info.packageName);
|
||||||
|
intent.putExtra(AppInfoWithHeader.EXTRA_HIDE_INFO_BUTTON, true);
|
||||||
try {
|
try {
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
} catch (ActivityNotFoundException e) {
|
} catch (ActivityNotFoundException e) {
|
||||||
@@ -627,6 +628,7 @@ public class InstalledAppDetails extends AppInfoBase
|
|||||||
// start new fragment to display extended information
|
// start new fragment to display extended information
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putString(InstalledAppDetails.ARG_PACKAGE_NAME, mAppEntry.info.packageName);
|
args.putString(InstalledAppDetails.ARG_PACKAGE_NAME, mAppEntry.info.packageName);
|
||||||
|
args.putBoolean(AppInfoWithHeader.EXTRA_HIDE_INFO_BUTTON, true);
|
||||||
|
|
||||||
SettingsActivity sa = (SettingsActivity) getActivity();
|
SettingsActivity sa = (SettingsActivity) getActivity();
|
||||||
sa.startPreferencePanel(fragment.getName(), args, -1, title, this, SUB_INFO_FRAGMENT);
|
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
|
// start new fragment to display extended information
|
||||||
getActivity().startActivity(new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
|
getActivity().startActivity(new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
|
||||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
.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_PACKAGE, mAppEntry.info.packageName)
|
||||||
.putExtra(Settings.EXTRA_APP_UID, mAppEntry.info.uid));
|
.putExtra(Settings.EXTRA_APP_UID, mAppEntry.info.uid));
|
||||||
}
|
}
|
||||||
|
@@ -429,10 +429,11 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
Activity activity = getActivity();
|
Activity activity = getActivity();
|
||||||
switch (mListType) {
|
switch (mListType) {
|
||||||
case LIST_TYPE_NOTIFICATION:
|
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)
|
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||||||
.putExtra(Settings.EXTRA_APP_PACKAGE, mCurrentPkgName)
|
.putExtra(Settings.EXTRA_APP_PACKAGE, mCurrentPkgName)
|
||||||
.putExtra(Settings.EXTRA_APP_UID, mCurrentUid));
|
.putExtra(Settings.EXTRA_APP_UID, mCurrentUid),
|
||||||
|
new UserHandle(UserHandle.getUserId(mCurrentUid)));
|
||||||
break;
|
break;
|
||||||
case LIST_TYPE_DOMAINS_URLS:
|
case LIST_TYPE_DOMAINS_URLS:
|
||||||
startAppInfoFragment(AppLaunchSettings.class, R.string.auto_launch_label);
|
startAppInfoFragment(AppLaunchSettings.class, R.string.auto_launch_label);
|
||||||
|
@@ -114,7 +114,7 @@ public class ProcessStatsDetail extends SettingsPreferenceFragment
|
|||||||
|
|
||||||
AppHeader.createAppHeader(this,
|
AppHeader.createAppHeader(this,
|
||||||
mApp.mUiTargetApp != null ? mApp.mUiTargetApp.loadIcon(mPm) : new ColorDrawable(0),
|
mApp.mUiTargetApp != null ? mApp.mUiTargetApp.loadIcon(mPm) : new ColorDrawable(0),
|
||||||
mApp.mUiLabel, null);
|
mApp.mUiLabel, AppInfoWithHeader.getInfoIntent(this, mApp.mPackage));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -54,6 +54,7 @@ import com.android.settings.SettingsActivity;
|
|||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.WirelessSettings;
|
import com.android.settings.WirelessSettings;
|
||||||
import com.android.settings.applications.AppInfoBase;
|
import com.android.settings.applications.AppInfoBase;
|
||||||
|
import com.android.settings.applications.AppInfoWithHeader;
|
||||||
import com.android.settings.applications.InstalledAppDetails;
|
import com.android.settings.applications.InstalledAppDetails;
|
||||||
import com.android.settings.applications.LayoutPreference;
|
import com.android.settings.applications.LayoutPreference;
|
||||||
import com.android.settings.bluetooth.BluetoothSettings;
|
import com.android.settings.bluetooth.BluetoothSettings;
|
||||||
@@ -464,7 +465,8 @@ public class PowerUsageDetail extends PowerUsageBase implements Button.OnClickLi
|
|||||||
appIcon = getActivity().getPackageManager().getDefaultActivityIcon();
|
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);
|
mDrainType != DrainType.APP ? android.R.color.white : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -29,6 +29,7 @@ import android.os.Bundle;
|
|||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.preference.Preference;
|
import android.preference.Preference;
|
||||||
import android.preference.Preference.OnPreferenceChangeListener;
|
import android.preference.Preference.OnPreferenceChangeListener;
|
||||||
|
import android.preference.Preference.OnPreferenceClickListener;
|
||||||
import android.preference.SwitchPreference;
|
import android.preference.SwitchPreference;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@@ -42,6 +43,7 @@ import com.android.settings.AppHeader;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SettingsPreferenceFragment;
|
import com.android.settings.SettingsPreferenceFragment;
|
||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
|
import com.android.settings.applications.AppInfoWithHeader;
|
||||||
import com.android.settings.notification.NotificationBackend.AppRow;
|
import com.android.settings.notification.NotificationBackend.AppRow;
|
||||||
|
|
||||||
import java.util.List;
|
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_PRIORITY = "priority";
|
||||||
private static final String KEY_PEEKABLE = "peekable";
|
private static final String KEY_PEEKABLE = "peekable";
|
||||||
private static final String KEY_SENSITIVE = "sensitive";
|
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_HAS_SETTINGS_INTENT = "has_settings_intent";
|
||||||
static final String EXTRA_SETTINGS_INTENT = "settings_intent";
|
static final String EXTRA_SETTINGS_INTENT = "settings_intent";
|
||||||
@@ -85,7 +88,7 @@ public class AppNotificationSettings extends SettingsPreferenceFragment {
|
|||||||
mCreated = true;
|
mCreated = true;
|
||||||
if (mAppRow == null) return;
|
if (mAppRow == null) return;
|
||||||
AppHeader.createAppHeader(this, mAppRow.icon, mAppRow.label,
|
AppHeader.createAppHeader(this, mAppRow.icon, mAppRow.label,
|
||||||
mAppRow.settingsIntent);
|
AppInfoWithHeader.getInfoIntent(this, mAppRow.pkg));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -189,6 +192,19 @@ public class AppNotificationSettings extends SettingsPreferenceFragment {
|
|||||||
return mBackend.setSensitive(pkg, uid, sensitive);
|
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) {
|
private void updateDependents(boolean banned) {
|
||||||
|
Reference in New Issue
Block a user