1d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos/* 2d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos * Copyright (C) 2016 The Android Open Source Project 3d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos * 4d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos * Licensed under the Apache License, Version 2.0 (the "License"); 5d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos * you may not use this file except in compliance with the License. 6d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos * You may obtain a copy of the License at 7d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos * 8d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos * http://www.apache.org/licenses/LICENSE-2.0 9d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos * 10d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos * Unless required by applicable law or agreed to in writing, software 11d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos * distributed under the License is distributed on an "AS IS" BASIS, 12d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos * See the License for the specific language governing permissions and 14d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos * limitations under the License 15d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos */ 16d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 17d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roospackage com.android.settings.notification; 18d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 19d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roosimport com.android.settings.R; 20d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roosimport com.android.settings.RestrictedListPreference; 21af67c3b57677d7680d094575a85ad160f739dfafRicky Waiimport com.android.settings.Utils; 22059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roosimport com.android.settingslib.RestrictedLockUtils; 23d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 24d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roosimport android.app.AlertDialog; 25d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roosimport android.app.Dialog; 26d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roosimport android.content.Context; 27d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roosimport android.content.DialogInterface; 284bd42073d4b373db2951e86fbc8daa3afc8f40afAdrian Roosimport android.os.Bundle; 29af67c3b57677d7680d094575a85ad160f739dfafRicky Waiimport android.os.UserHandle; 30af67c3b57677d7680d094575a85ad160f739dfafRicky Waiimport android.os.UserManager; 31d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roosimport android.provider.Settings; 32d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roosimport android.util.AttributeSet; 33d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roosimport android.view.View; 34d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roosimport android.widget.CheckBox; 35d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roosimport android.widget.CompoundButton; 36059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roosimport android.widget.ImageView; 37d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roosimport android.widget.ListAdapter; 3854dc9d52d0f35843510dbd7dbc8951389bb85039Sudheer Shankaimport android.widget.ListView; 39d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 40d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roospublic class NotificationLockscreenPreference extends RestrictedListPreference { 41d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 42d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos private boolean mAllowRemoteInput; 43d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos private Listener mListener; 44d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos private boolean mShowRemoteInput; 459b753da2b73de4b54785298658a65331747468e2Ricky Wai private boolean mRemoteInputCheckBoxEnabled = true; 46af67c3b57677d7680d094575a85ad160f739dfafRicky Wai private int mUserId = UserHandle.myUserId(); 47059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos private RestrictedLockUtils.EnforcedAdmin mAdminRestrictingRemoteInput; 48d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 49d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos public NotificationLockscreenPreference(Context context, AttributeSet attrs) { 50d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos super(context, attrs); 51d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos } 52d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 539b753da2b73de4b54785298658a65331747468e2Ricky Wai public void setRemoteInputCheckBoxEnabled(boolean enabled) { 549b753da2b73de4b54785298658a65331747468e2Ricky Wai mRemoteInputCheckBoxEnabled = enabled; 559b753da2b73de4b54785298658a65331747468e2Ricky Wai } 569b753da2b73de4b54785298658a65331747468e2Ricky Wai 57059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos public void setRemoteInputRestricted(RestrictedLockUtils.EnforcedAdmin admin) { 58059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos mAdminRestrictingRemoteInput = admin; 59059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos } 60059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos 61d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos @Override 62af67c3b57677d7680d094575a85ad160f739dfafRicky Wai protected void onClick() { 63af67c3b57677d7680d094575a85ad160f739dfafRicky Wai final Context context = getContext(); 64af67c3b57677d7680d094575a85ad160f739dfafRicky Wai if (!Utils.startQuietModeDialogIfNecessary(context, UserManager.get(context), mUserId)) { 65af67c3b57677d7680d094575a85ad160f739dfafRicky Wai // Call super to create preference dialog only when work mode is on 66af67c3b57677d7680d094575a85ad160f739dfafRicky Wai // startQuietModeDialogIfNecessary will return false if mUserId is not a managed user 67af67c3b57677d7680d094575a85ad160f739dfafRicky Wai super.onClick(); 68af67c3b57677d7680d094575a85ad160f739dfafRicky Wai } 69af67c3b57677d7680d094575a85ad160f739dfafRicky Wai } 70af67c3b57677d7680d094575a85ad160f739dfafRicky Wai 71af67c3b57677d7680d094575a85ad160f739dfafRicky Wai public void setUserId(int userId) { 72af67c3b57677d7680d094575a85ad160f739dfafRicky Wai mUserId = userId; 73af67c3b57677d7680d094575a85ad160f739dfafRicky Wai } 74af67c3b57677d7680d094575a85ad160f739dfafRicky Wai 75af67c3b57677d7680d094575a85ad160f739dfafRicky Wai @Override 76d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos protected void onPrepareDialogBuilder(AlertDialog.Builder builder, 77d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos DialogInterface.OnClickListener innerListener) { 78d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 79d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos mListener = new Listener(innerListener); 804bd42073d4b373db2951e86fbc8daa3afc8f40afAdrian Roos builder.setSingleChoiceItems(createListAdapter(), getSelectedValuePos(), mListener); 81d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos mShowRemoteInput = getEntryValues().length == 3; 82d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos mAllowRemoteInput = Settings.Secure.getInt(getContext().getContentResolver(), 83d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos Settings.Secure.LOCK_SCREEN_ALLOW_REMOTE_INPUT, 0) != 0; 84d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos builder.setView(R.layout.lockscreen_remote_input); 85d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos } 86d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 87d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos @Override 88d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos protected void onDialogCreated(Dialog dialog) { 89d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos super.onDialogCreated(dialog); 90d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos dialog.create(); 91059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos CheckBox checkbox = (CheckBox) dialog.findViewById(R.id.lockscreen_remote_input); 92059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos checkbox.setChecked(!mAllowRemoteInput); 93059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos checkbox.setOnCheckedChangeListener(mListener); 94059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos checkbox.setEnabled(mAdminRestrictingRemoteInput == null); 95059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos 96059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos View restricted = dialog.findViewById(R.id.restricted_lock_icon_remote_input); 97059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos restricted.setVisibility(mAdminRestrictingRemoteInput == null ? View.GONE : View.VISIBLE); 98059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos 99059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos if (mAdminRestrictingRemoteInput != null) { 100059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos checkbox.setClickable(false); 101059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos dialog.findViewById(com.android.internal.R.id.customPanel) 102059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos .setOnClickListener(mListener); 103059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos } 1044bd42073d4b373db2951e86fbc8daa3afc8f40afAdrian Roos } 1054bd42073d4b373db2951e86fbc8daa3afc8f40afAdrian Roos 1064bd42073d4b373db2951e86fbc8daa3afc8f40afAdrian Roos @Override 1074bd42073d4b373db2951e86fbc8daa3afc8f40afAdrian Roos protected void onDialogStateRestored(Dialog dialog, Bundle savedInstanceState) { 1084bd42073d4b373db2951e86fbc8daa3afc8f40afAdrian Roos super.onDialogStateRestored(dialog, savedInstanceState); 1094bd42073d4b373db2951e86fbc8daa3afc8f40afAdrian Roos ListView listView = ((AlertDialog) dialog).getListView(); 1104bd42073d4b373db2951e86fbc8daa3afc8f40afAdrian Roos int selectedPosition = listView.getCheckedItemPosition(); 1114bd42073d4b373db2951e86fbc8daa3afc8f40afAdrian Roos 112d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos View panel = dialog.findViewById(com.android.internal.R.id.customPanel); 1134bd42073d4b373db2951e86fbc8daa3afc8f40afAdrian Roos panel.setVisibility(checkboxVisibilityForSelectedIndex(selectedPosition, 1144bd42073d4b373db2951e86fbc8daa3afc8f40afAdrian Roos mShowRemoteInput)); 115d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos mListener.setView(panel); 116d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos } 117d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 118d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos @Override 119d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos protected ListAdapter createListAdapter() { 120d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos return new RestrictedArrayAdapter(getContext(), getEntries(), -1); 121d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos } 122d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 123d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos @Override 124d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos protected void onDialogClosed(boolean positiveResult) { 125d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos super.onDialogClosed(positiveResult); 126d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos Settings.Secure.putInt(getContext().getContentResolver(), 127d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos Settings.Secure.LOCK_SCREEN_ALLOW_REMOTE_INPUT, mAllowRemoteInput ? 1 : 0); 128d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos } 129d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 130d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos @Override 131d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos protected boolean isAutoClosePreference() { 132d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos return false; 133d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos } 134d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 1359b753da2b73de4b54785298658a65331747468e2Ricky Wai private int checkboxVisibilityForSelectedIndex(int selected, 1369b753da2b73de4b54785298658a65331747468e2Ricky Wai boolean showRemoteAtAll) { 1379b753da2b73de4b54785298658a65331747468e2Ricky Wai return selected == 1 && showRemoteAtAll && mRemoteInputCheckBoxEnabled ? View.VISIBLE 1389b753da2b73de4b54785298658a65331747468e2Ricky Wai : View.GONE; 139d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos } 140d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 141d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos private class Listener implements DialogInterface.OnClickListener, 142059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos CompoundButton.OnCheckedChangeListener, View.OnClickListener { 143d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 144d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos private final DialogInterface.OnClickListener mInner; 145d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos private View mView; 146d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 147d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos public Listener(DialogInterface.OnClickListener inner) { 148d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos mInner = inner; 149d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos } 150d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 151d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos @Override 152d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos public void onClick(DialogInterface dialog, int which) { 153d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos mInner.onClick(dialog, which); 15454dc9d52d0f35843510dbd7dbc8951389bb85039Sudheer Shanka ListView listView = ((AlertDialog) dialog).getListView(); 15554dc9d52d0f35843510dbd7dbc8951389bb85039Sudheer Shanka int selectedPosition = listView.getCheckedItemPosition(); 156d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos if (mView != null) { 15754dc9d52d0f35843510dbd7dbc8951389bb85039Sudheer Shanka mView.setVisibility( 15854dc9d52d0f35843510dbd7dbc8951389bb85039Sudheer Shanka checkboxVisibilityForSelectedIndex(selectedPosition, mShowRemoteInput)); 159d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos } 160d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos } 161d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 162d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos @Override 163d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 164e6d60877b201e911752f74db556c44db6c4838d7Adrian Roos mAllowRemoteInput = !isChecked; 165d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos } 166d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos 167d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos public void setView(View view) { 168d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos mView = view; 169d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos } 170059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos 171059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos @Override 172059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos public void onClick(View v) { 173059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos if (v.getId() == com.android.internal.R.id.customPanel) { 174059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(), 175059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos mAdminRestrictingRemoteInput); 176059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos } 177059b0fa060b8805c6c6199ccd9a4e13e64ad6995Adrian Roos } 178d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos } 179d553f4f9a94a16bb19463fb42294212dbc21c09aAdrian Roos} 180