summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJulia Reynolds <juliacr@google.com>2018-04-20 06:51:54 -0700
committerandroid-build-merger <android-build-merger@google.com>2018-04-20 06:51:54 -0700
commitcf326a0375224b2d19c3bc591c16f434d1ef9f30 (patch)
tree9bb37730826fbe5e565e6820c37ca74d68b6e516 /src
parent13365e83c034cbbbb35af05564d525291a7597fe (diff)
parent60aa99a95c26c5aec541ae346f6b072fc914b0c7 (diff)
downloadpackages_apps_Settings-cf326a0375224b2d19c3bc591c16f434d1ef9f30.tar.gz
packages_apps_Settings-cf326a0375224b2d19c3bc591c16f434d1ef9f30.tar.bz2
packages_apps_Settings-cf326a0375224b2d19c3bc591c16f434d1ef9f30.zip
Merge "Fix crash on rotation" into pi-dev am: 3bdd65e255
am: 60aa99a95c Change-Id: I02a301bd9a83491acdf3c76e94a15253a3191e83
Diffstat (limited to 'src')
-rw-r--r--src/com/android/settings/notification/AppNotificationSettings.java7
-rw-r--r--src/com/android/settings/notification/HeaderPreferenceController.java23
-rw-r--r--src/com/android/settings/notification/NotificationPreferenceController.java2
-rw-r--r--src/com/android/settings/notification/NotificationSettingsBase.java80
4 files changed, 76 insertions, 36 deletions
diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index 6776931999..2bc2489048 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -68,10 +68,7 @@ public class AppNotificationSettings extends NotificationSettingsBase {
mDynamicPreferences.clear();
}
- if (mShowLegacyChannelConfig) {
- addPreferencesFromResource(R.xml.channel_notification_settings);
- } else {
- addPreferencesFromResource(R.xml.app_notification_settings);
+ if (!mShowLegacyChannelConfig) {
// Load channel settings
new AsyncTask<Void, Void, Void>() {
@Override
@@ -106,7 +103,7 @@ public class AppNotificationSettings extends NotificationSettingsBase {
@Override
protected int getPreferenceScreenResId() {
- return R.xml.notification_settings;
+ return R.xml.app_notification_settings;
}
@Override
diff --git a/src/com/android/settings/notification/HeaderPreferenceController.java b/src/com/android/settings/notification/HeaderPreferenceController.java
index d5e289b317..c6f6a80621 100644
--- a/src/com/android/settings/notification/HeaderPreferenceController.java
+++ b/src/com/android/settings/notification/HeaderPreferenceController.java
@@ -18,6 +18,8 @@ package com.android.settings.notification;
import static com.android.settings.widget.EntityHeaderController.PREF_KEY_APP_HEADER;
+import android.arch.lifecycle.LifecycleObserver;
+import android.arch.lifecycle.OnLifecycleEvent;
import android.content.Context;
import android.support.v14.preference.PreferenceFragment;
import android.support.v7.preference.Preference;
@@ -30,13 +32,16 @@ import com.android.settings.R;
import com.android.settings.applications.LayoutPreference;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.widget.EntityHeaderController;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.core.lifecycle.events.OnStart;
import java.util.Objects;
public class HeaderPreferenceController extends NotificationPreferenceController
- implements PreferenceControllerMixin {
+ implements PreferenceControllerMixin, LifecycleObserver {
private final PreferenceFragment mFragment;
+ private EntityHeaderController mHeaderController;
public HeaderPreferenceController(Context context, PreferenceFragment fragment) {
super(context, null);
@@ -57,10 +62,9 @@ public class HeaderPreferenceController extends NotificationPreferenceController
public void updateState(Preference preference) {
if (mAppRow != null && mFragment != null) {
LayoutPreference pref = (LayoutPreference) preference;
- EntityHeaderController controller = EntityHeaderController
- .newInstance(mFragment.getActivity(), mFragment,
- pref.findViewById(R.id.entity_header));
- pref = controller.setIcon(mAppRow.icon)
+ mHeaderController = EntityHeaderController.newInstance(
+ mFragment.getActivity(), mFragment, pref.findViewById(R.id.entity_header));
+ pref = mHeaderController.setIcon(mAppRow.icon)
.setLabel(getLabel())
.setSummary(getSummary())
.setPackageName(mAppRow.pkg)
@@ -68,7 +72,7 @@ public class HeaderPreferenceController extends NotificationPreferenceController
.setButtonActions(EntityHeaderController.ActionType.ACTION_NOTIF_PREFERENCE,
EntityHeaderController.ActionType.ACTION_NONE)
.setHasAppInfoLink(true)
- .done(mFragment.getActivity(), mContext);
+ .done(null, mContext);
pref.findViewById(R.id.entity_header).setVisibility(View.VISIBLE);
}
}
@@ -101,4 +105,11 @@ public class HeaderPreferenceController extends NotificationPreferenceController
return "";
}
}
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_START)
+ public void onStart() {
+ if (mHeaderController != null) {
+ mHeaderController.styleActionBar(mFragment.getActivity());
+ }
+ }
}
diff --git a/src/com/android/settings/notification/NotificationPreferenceController.java b/src/com/android/settings/notification/NotificationPreferenceController.java
index 1a65351659..1e477c41fd 100644
--- a/src/com/android/settings/notification/NotificationPreferenceController.java
+++ b/src/com/android/settings/notification/NotificationPreferenceController.java
@@ -96,7 +96,7 @@ public abstract class NotificationPreferenceController extends AbstractPreferenc
if (preference != null) {
mPreference = preference;
}
- if (this instanceof Preference.OnPreferenceChangeListener) {
+ if (mPreference != null && this instanceof Preference.OnPreferenceChangeListener) {
mPreference.setOnPreferenceChangeListener(
(Preference.OnPreferenceChangeListener) this);
}
diff --git a/src/com/android/settings/notification/NotificationSettingsBase.java b/src/com/android/settings/notification/NotificationSettingsBase.java
index 7eb0ba4e50..faf6fb3e1d 100644
--- a/src/com/android/settings/notification/NotificationSettingsBase.java
+++ b/src/com/android/settings/notification/NotificationSettingsBase.java
@@ -20,6 +20,7 @@ import static android.app.NotificationManager.IMPORTANCE_LOW;
import static android.app.NotificationManager.IMPORTANCE_NONE;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+import android.app.Activity;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationChannelGroup;
@@ -81,28 +82,25 @@ abstract public class NotificationSettingsBase extends DashboardFragment {
protected List<Preference> mDynamicPreferences = new ArrayList<>();
protected ImportanceListener mImportanceListener = new ImportanceListener();
+ protected Intent mIntent;
+ protected Bundle mArgs;
+
@Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
+ public void onAttach(Context context) {
+ super.onAttach(context);
mContext = getActivity();
- Intent intent = getActivity().getIntent();
- Bundle args = getArguments();
- if (DEBUG) Log.d(TAG, "onCreate getIntent()=" + intent);
- if (intent == null && args == null) {
- Log.w(TAG, "No intent");
- toastAndFinish();
- return;
- }
+ mIntent = getActivity().getIntent();
+ mArgs = getArguments();
mPm = getPackageManager();
mNm = NotificationManager.from(mContext);
- mPkg = args != null && args.containsKey(AppInfoBase.ARG_PACKAGE_NAME)
- ? args.getString(AppInfoBase.ARG_PACKAGE_NAME)
- : intent.getStringExtra(Settings.EXTRA_APP_PACKAGE);
- mUid = args != null && args.containsKey(AppInfoBase.ARG_PACKAGE_UID)
- ? args.getInt(AppInfoBase.ARG_PACKAGE_UID)
- : intent.getIntExtra(Settings.EXTRA_APP_UID, -1);
+ mPkg = mArgs != null && mArgs.containsKey(AppInfoBase.ARG_PACKAGE_NAME)
+ ? mArgs.getString(AppInfoBase.ARG_PACKAGE_NAME)
+ : mIntent.getStringExtra(Settings.EXTRA_APP_PACKAGE);
+ mUid = mArgs != null && mArgs.containsKey(AppInfoBase.ARG_PACKAGE_UID)
+ ? mArgs.getInt(AppInfoBase.ARG_PACKAGE_UID)
+ : mIntent.getIntExtra(Settings.EXTRA_APP_UID, -1);
if (mUid < 0) {
try {
@@ -113,13 +111,38 @@ abstract public class NotificationSettingsBase extends DashboardFragment {
mPkgInfo = findPackageInfo(mPkg, mUid);
+ mUserId = UserHandle.getUserId(mUid);
+ mSuspendedAppsAdmin = RestrictedLockUtils.checkIfApplicationIsSuspended(
+ mContext, mPkg, mUserId);
+
+ loadChannel();
+ loadAppRow();
+ loadChannelGroup();
+ collectConfigActivities();
+
+ getLifecycle().addObserver(use(HeaderPreferenceController.class));
+
+ for (NotificationPreferenceController controller : mControllers) {
+ controller.onResume(mAppRow, mChannel, mChannelGroup, mSuspendedAppsAdmin);
+ }
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ if (mIntent == null && mArgs == null) {
+ Log.w(TAG, "No intent");
+ toastAndFinish();
+ return;
+ }
+
if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null) {
Log.w(TAG, "Missing package or uid or packageinfo");
toastAndFinish();
return;
}
- mUserId = UserHandle.getUserId(mUid);
startListeningToPackageRemove();
}
@@ -132,18 +155,26 @@ abstract public class NotificationSettingsBase extends DashboardFragment {
@Override
public void onResume() {
super.onResume();
- if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null) {
+ if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null || mAppRow == null) {
Log.w(TAG, "Missing package or uid or packageinfo");
finish();
return;
}
- mAppRow = mBackend.loadAppRow(mContext, mPm, mPkgInfo);
+ // Reload app, channel, etc onResume in case they've changed. A little wasteful if we've
+ // just done onAttach but better than making every preference controller reload all
+ // the data
+ loadAppRow();
if (mAppRow == null) {
Log.w(TAG, "Can't load package");
finish();
return;
}
+ loadChannel();
+ loadChannelGroup();
collectConfigActivities();
+ }
+
+ private void loadChannel() {
Intent intent = getActivity().getIntent();
String channelId = intent != null ? intent.getStringExtra(Settings.EXTRA_CHANNEL_ID) : null;
if (channelId == null && intent != null) {
@@ -151,12 +182,13 @@ abstract public class NotificationSettingsBase extends DashboardFragment {
channelId = args != null ? args.getString(Settings.EXTRA_CHANNEL_ID) : null;
}
mChannel = mBackend.getChannel(mPkg, mUid, channelId);
+ }
- NotificationChannelGroup group = null;
-
- mSuspendedAppsAdmin = RestrictedLockUtils.checkIfApplicationIsSuspended(
- mContext, mPkg, mUserId);
+ private void loadAppRow() {
+ mAppRow = mBackend.loadAppRow(mContext, mPm, mPkgInfo);
+ }
+ private void loadChannelGroup() {
mShowLegacyChannelConfig = mBackend.onlyHasDefaultChannel(mAppRow.pkg, mAppRow.uid)
|| (mChannel != null
&& NotificationChannel.DEFAULT_CHANNEL_ID.equals(mChannel.getId()));
@@ -166,7 +198,7 @@ abstract public class NotificationSettingsBase extends DashboardFragment {
mAppRow.pkg, mAppRow.uid, NotificationChannel.DEFAULT_CHANNEL_ID);
}
if (mChannel != null && !TextUtils.isEmpty(mChannel.getGroup())) {
- group = mBackend.getGroup(mPkg, mUid, mChannel.getGroup());
+ NotificationChannelGroup group = mBackend.getGroup(mPkg, mUid, mChannel.getGroup());
if (group != null) {
mChannelGroup = group;
}