Allow app lists to have a toggle
And make the notifications app list toggle block/unblock notifications. Test: make -j RunSettingsRoboTests Change-Id: I7417b98fb1c66504897df515c4c84afad591764e Fixes: 74318867
This commit is contained in:
@@ -28,6 +28,7 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.Switch;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.android.settings.R;
|
||||
@@ -47,7 +48,10 @@ public class ApplicationViewHolder extends RecyclerView.ViewHolder {
|
||||
final TextView mSummary;
|
||||
@VisibleForTesting
|
||||
final TextView mDisabled;
|
||||
|
||||
@VisibleForTesting
|
||||
final ViewGroup mWidgetContainer;
|
||||
@VisibleForTesting
|
||||
final Switch mSwitch;
|
||||
|
||||
ApplicationViewHolder(View itemView, boolean keepStableHeight) {
|
||||
super(itemView);
|
||||
@@ -57,11 +61,30 @@ public class ApplicationViewHolder extends RecyclerView.ViewHolder {
|
||||
mSummary = itemView.findViewById(android.R.id.summary);
|
||||
mDisabled = itemView.findViewById(R.id.appendix);
|
||||
mKeepStableHeight = keepStableHeight;
|
||||
mSwitch = itemView.findViewById(R.id.switchWidget);
|
||||
mWidgetContainer = itemView.findViewById(android.R.id.widget_frame);
|
||||
}
|
||||
|
||||
static View newView(ViewGroup parent) {
|
||||
return LayoutInflater.from(parent.getContext())
|
||||
return newView(parent, false);
|
||||
}
|
||||
|
||||
static View newView(ViewGroup parent, boolean twoTarget) {
|
||||
ViewGroup view = (ViewGroup) LayoutInflater.from(parent.getContext())
|
||||
.inflate(R.layout.preference_app, parent, false);
|
||||
if (twoTarget) {
|
||||
final ViewGroup widgetFrame = view.findViewById(android.R.id.widget_frame);
|
||||
if (widgetFrame != null) {
|
||||
LayoutInflater.from(parent.getContext())
|
||||
.inflate(R.layout.preference_widget_master_switch, widgetFrame, true);
|
||||
|
||||
View divider = LayoutInflater.from(parent.getContext()).inflate(
|
||||
R.layout.preference_two_target_divider, view, false);
|
||||
// second to last, before widget frame
|
||||
view.addView(divider, view.getChildCount() - 1);
|
||||
}
|
||||
}
|
||||
return view;
|
||||
}
|
||||
|
||||
void setSummary(CharSequence summary) {
|
||||
@@ -141,4 +164,12 @@ public class ApplicationViewHolder extends RecyclerView.ViewHolder {
|
||||
setSummary(invalidSizeStr);
|
||||
}
|
||||
}
|
||||
|
||||
void updateSwitch(View.OnClickListener listener, boolean enabled, boolean checked) {
|
||||
if (mSwitch != null && mWidgetContainer != null) {
|
||||
mWidgetContainer.setOnClickListener(listener);
|
||||
mSwitch.setChecked(checked);
|
||||
mSwitch.setEnabled(enabled);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -109,6 +109,7 @@ import com.android.settings.dashboard.SummaryLoader;
|
||||
import com.android.settings.fuelgauge.HighPowerDetail;
|
||||
import com.android.settings.notification.AppNotificationSettings;
|
||||
import com.android.settings.notification.ConfigureNotificationSettings;
|
||||
import com.android.settings.notification.NotificationBackend;
|
||||
import com.android.settings.widget.LoadingViewController;
|
||||
import com.android.settings.wifi.AppStateChangeWifiStateBridge;
|
||||
import com.android.settings.wifi.ChangeWifiStateDetails;
|
||||
@@ -223,6 +224,7 @@ public class ManageApplications extends InstrumentedFragment
|
||||
private Spinner mFilterSpinner;
|
||||
private FilterSpinnerAdapter mFilterAdapter;
|
||||
private UsageStatsManager mUsageStatsManager;
|
||||
private NotificationBackend mNotificationBackend;
|
||||
private ResetAppsHelper mResetAppsHelper;
|
||||
private String mVolumeUuid;
|
||||
private int mStorageType;
|
||||
@@ -292,6 +294,7 @@ public class ManageApplications extends InstrumentedFragment
|
||||
mListType = LIST_TYPE_NOTIFICATION;
|
||||
mUsageStatsManager =
|
||||
(UsageStatsManager) getContext().getSystemService(Context.USAGE_STATS_SERVICE);
|
||||
mNotificationBackend = new NotificationBackend();
|
||||
mSortOrder = R.id.sort_order_recent_notification;
|
||||
screenTitle = R.string.app_notifications_title;
|
||||
} else {
|
||||
@@ -869,8 +872,9 @@ public class ManageApplications extends InstrumentedFragment
|
||||
mContext = manageApplications.getActivity();
|
||||
mAppFilter = appFilter;
|
||||
if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) {
|
||||
mExtraInfoBridge = new AppStateNotificationBridge(mState, this,
|
||||
manageApplications.mUsageStatsManager);
|
||||
mExtraInfoBridge = new AppStateNotificationBridge(mContext, mState, this,
|
||||
manageApplications.mUsageStatsManager,
|
||||
manageApplications.mNotificationBackend);
|
||||
} else if (mManageApplications.mListType == LIST_TYPE_USAGE_ACCESS) {
|
||||
mExtraInfoBridge = new AppStateUsageBridge(mContext, mState, this);
|
||||
} else if (mManageApplications.mListType == LIST_TYPE_HIGH_POWER) {
|
||||
@@ -988,7 +992,12 @@ public class ManageApplications extends InstrumentedFragment
|
||||
|
||||
@Override
|
||||
public ApplicationViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
final View view = ApplicationViewHolder.newView(parent);
|
||||
View view;
|
||||
if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) {
|
||||
view = ApplicationViewHolder.newView(parent, true /* twoTarget */);
|
||||
} else {
|
||||
view = ApplicationViewHolder.newView(parent, false /* twoTarget */);
|
||||
}
|
||||
return new ApplicationViewHolder(view,
|
||||
shouldUseStableItemHeight(mManageApplications.mListType));
|
||||
}
|
||||
@@ -1276,6 +1285,7 @@ public class ManageApplications extends InstrumentedFragment
|
||||
mState.ensureIcon(entry);
|
||||
holder.setIcon(entry.icon);
|
||||
updateSummary(holder, entry);
|
||||
updateSwitch(holder, entry);
|
||||
holder.updateDisableView(entry.info);
|
||||
}
|
||||
holder.setEnabled(isEnabled(position));
|
||||
@@ -1328,6 +1338,24 @@ public class ManageApplications extends InstrumentedFragment
|
||||
}
|
||||
}
|
||||
|
||||
private void updateSwitch(ApplicationViewHolder holder, AppEntry entry) {
|
||||
switch (mManageApplications.mListType) {
|
||||
case LIST_TYPE_NOTIFICATION:
|
||||
holder.updateSwitch(((AppStateNotificationBridge) mExtraInfoBridge)
|
||||
.getSwitchOnClickListener(entry),
|
||||
AppStateNotificationBridge.enableSwitch(entry),
|
||||
AppStateNotificationBridge.checkSwitch(entry));
|
||||
if (entry.extraInfo != null) {
|
||||
holder.setSummary(AppStateNotificationBridge.getSummary(mContext,
|
||||
(NotificationsSentState) entry.extraInfo,
|
||||
(mLastSortMode == R.id.sort_order_recent_notification)));
|
||||
} else {
|
||||
holder.setSummary(null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean hasExtraView() {
|
||||
return mExtraViewController != null
|
||||
&& mExtraViewController.shouldShow();
|
||||
|
Reference in New Issue
Block a user