| /* | |
| * Copyright (C) 2016 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 | |
| */ | |
| package com.android.settings.notification; | |
| import com.android.settings.R; | |
| import com.android.settings.RestrictedListPreference; | |
| import com.android.settings.Utils; | |
| import android.app.AlertDialog; | |
| import android.app.Dialog; | |
| import android.content.Context; | |
| import android.content.DialogInterface; | |
| import android.os.UserHandle; | |
| import android.os.UserManager; | |
| import android.provider.Settings; | |
| import android.util.AttributeSet; | |
| import android.view.View; | |
| import android.widget.CheckBox; | |
| import android.widget.CompoundButton; | |
| import android.widget.ListAdapter; | |
| import android.widget.ListView; | |
| public class NotificationLockscreenPreference extends RestrictedListPreference { | |
| private boolean mAllowRemoteInput; | |
| private int mInitialIndex; | |
| private Listener mListener; | |
| private boolean mShowRemoteInput; | |
| private boolean mRemoteInputCheckBoxEnabled = true; | |
| private int mUserId = UserHandle.myUserId(); | |
| public NotificationLockscreenPreference(Context context, AttributeSet attrs) { | |
| super(context, attrs); | |
| } | |
| public void setRemoteInputCheckBoxEnabled(boolean enabled) { | |
| mRemoteInputCheckBoxEnabled = enabled; | |
| } | |
| @Override | |
| protected void onClick() { | |
| final Context context = getContext(); | |
| if (!Utils.startQuietModeDialogIfNecessary(context, UserManager.get(context), mUserId)) { | |
| // Call super to create preference dialog only when work mode is on | |
| // startQuietModeDialogIfNecessary will return false if mUserId is not a managed user | |
| super.onClick(); | |
| } | |
| } | |
| public void setUserId(int userId) { | |
| mUserId = userId; | |
| } | |
| @Override | |
| protected void onPrepareDialogBuilder(AlertDialog.Builder builder, | |
| DialogInterface.OnClickListener innerListener) { | |
| final String selectedValue = getValue(); | |
| mInitialIndex = (selectedValue == null) ? -1 : findIndexOfValue(selectedValue); | |
| mListener = new Listener(innerListener); | |
| builder.setSingleChoiceItems(createListAdapter(), mInitialIndex, mListener); | |
| mShowRemoteInput = getEntryValues().length == 3; | |
| mAllowRemoteInput = Settings.Secure.getInt(getContext().getContentResolver(), | |
| Settings.Secure.LOCK_SCREEN_ALLOW_REMOTE_INPUT, 0) != 0; | |
| builder.setView(R.layout.lockscreen_remote_input); | |
| } | |
| @Override | |
| protected void onDialogCreated(Dialog dialog) { | |
| super.onDialogCreated(dialog); | |
| dialog.create(); | |
| CheckBox view = (CheckBox) dialog.findViewById(R.id.lockscreen_remote_input); | |
| view.setChecked(!mAllowRemoteInput); | |
| view.setOnCheckedChangeListener(mListener); | |
| View panel = dialog.findViewById(com.android.internal.R.id.customPanel); | |
| panel.setVisibility(checkboxVisibilityForSelectedIndex(mInitialIndex, mShowRemoteInput)); | |
| mListener.setView(panel); | |
| } | |
| @Override | |
| protected ListAdapter createListAdapter() { | |
| return new RestrictedArrayAdapter(getContext(), getEntries(), -1); | |
| } | |
| @Override | |
| protected void onDialogClosed(boolean positiveResult) { | |
| super.onDialogClosed(positiveResult); | |
| Settings.Secure.putInt(getContext().getContentResolver(), | |
| Settings.Secure.LOCK_SCREEN_ALLOW_REMOTE_INPUT, mAllowRemoteInput ? 1 : 0); | |
| } | |
| @Override | |
| protected boolean isAutoClosePreference() { | |
| return false; | |
| } | |
| private int checkboxVisibilityForSelectedIndex(int selected, | |
| boolean showRemoteAtAll) { | |
| return selected == 1 && showRemoteAtAll && mRemoteInputCheckBoxEnabled ? View.VISIBLE | |
| : View.GONE; | |
| } | |
| private class Listener implements DialogInterface.OnClickListener, | |
| CompoundButton.OnCheckedChangeListener { | |
| private final DialogInterface.OnClickListener mInner; | |
| private View mView; | |
| public Listener(DialogInterface.OnClickListener inner) { | |
| mInner = inner; | |
| } | |
| @Override | |
| public void onClick(DialogInterface dialog, int which) { | |
| mInner.onClick(dialog, which); | |
| ListView listView = ((AlertDialog) dialog).getListView(); | |
| int selectedPosition = listView.getCheckedItemPosition(); | |
| if (mView != null) { | |
| mView.setVisibility( | |
| checkboxVisibilityForSelectedIndex(selectedPosition, mShowRemoteInput)); | |
| } | |
| } | |
| @Override | |
| public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { | |
| mAllowRemoteInput = !isChecked; | |
| } | |
| public void setView(View view) { | |
| mView = view; | |
| } | |
| } | |
| } |