1f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla/* 2f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla * Copyright (C) 2016 The Android Open Source Project 3f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla * 4f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla * Licensed under the Apache License, Version 2.0 (the "License"); 5f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla * you may not use this file except in compliance with the License. 6f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla * You may obtain a copy of the License at 7f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla * 8f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla * http://www.apache.org/licenses/LICENSE-2.0 9f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla * 10f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla * Unless required by applicable law or agreed to in writing, software 11f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla * distributed under the License is distributed on an "AS IS" BASIS, 12f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla * See the License for the specific language governing permissions and 14f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla * limitations under the License 15f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla */ 16f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla 176472501f2e7ba018d8aa43c61e55874d756cecb8Suprabh Shuklapackage com.android.server.retaildemo; 18f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla 19f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shuklaimport android.app.AlertDialog; 20f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shuklaimport android.app.Dialog; 21f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shuklaimport android.content.Context; 22f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shuklaimport android.os.CountDownTimer; 23f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shuklaimport android.view.WindowManager; 24f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shuklaimport android.widget.TextView; 25f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla 26f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shuklaimport com.android.internal.R; 27f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla 28f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shuklapublic class UserInactivityCountdownDialog extends AlertDialog { 29f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla 30f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla private OnCountDownExpiredListener mOnCountDownExpiredListener; 31f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla private CountDownTimer mCountDownTimer; 32f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla private long mCountDownDuration; 33f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla private long mRefreshInterval; 34f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla 356472501f2e7ba018d8aa43c61e55874d756cecb8Suprabh Shukla UserInactivityCountdownDialog(Context context, long duration, long refreshInterval) { 36f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla super(context); 37f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla mCountDownDuration = duration; 38f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla mRefreshInterval = refreshInterval; 390271fd661dc547e15495e31913d5cde4f122dde9Suprabh Shukla 400271fd661dc547e15495e31913d5cde4f122dde9Suprabh Shukla getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR); 41f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla WindowManager.LayoutParams attrs = getWindow().getAttributes(); 42f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla attrs.privateFlags = WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS; 43f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla getWindow().setAttributes(attrs); 440271fd661dc547e15495e31913d5cde4f122dde9Suprabh Shukla 45f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla setTitle(R.string.demo_user_inactivity_timeout_title); 460271fd661dc547e15495e31913d5cde4f122dde9Suprabh Shukla setMessage(getContext().getString(R.string.demo_user_inactivity_timeout_countdown, 470271fd661dc547e15495e31913d5cde4f122dde9Suprabh Shukla duration)); 48f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla } 49f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla 50f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla public void setOnCountDownExpiredListener( 51f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla OnCountDownExpiredListener onCountDownExpiredListener) { 52f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla mOnCountDownExpiredListener = onCountDownExpiredListener; 53f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla } 54f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla 55f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla public void setPositiveButtonClickListener(OnClickListener onClickListener) { 56f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla setButton(Dialog.BUTTON_POSITIVE, 570271fd661dc547e15495e31913d5cde4f122dde9Suprabh Shukla getContext().getString(R.string.demo_user_inactivity_timeout_right_button), 58f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla onClickListener); 59f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla } 60f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla 61f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla public void setNegativeButtonClickListener(OnClickListener onClickListener) { 62f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla setButton(Dialog.BUTTON_NEGATIVE, 630271fd661dc547e15495e31913d5cde4f122dde9Suprabh Shukla getContext().getString(R.string.demo_user_inactivity_timeout_left_button), 64f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla onClickListener); 65f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla } 66f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla 67f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla @Override 68f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla public void show() { 69f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla super.show(); 700271fd661dc547e15495e31913d5cde4f122dde9Suprabh Shukla final TextView messageView = (TextView) findViewById(R.id.message); 710271fd661dc547e15495e31913d5cde4f122dde9Suprabh Shukla messageView.post(new Runnable() { 72f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla @Override 73f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla public void run() { 74f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla mCountDownTimer = new CountDownTimer(mCountDownDuration, mRefreshInterval) { 75f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla 76f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla @Override 77f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla public void onTick(long millisUntilFinished) { 780271fd661dc547e15495e31913d5cde4f122dde9Suprabh Shukla String msg = getContext().getString( 79f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla R.string.demo_user_inactivity_timeout_countdown, 80f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla millisUntilFinished / 1000); 810271fd661dc547e15495e31913d5cde4f122dde9Suprabh Shukla messageView.setText(msg); 82f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla } 83f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla 84f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla @Override 85f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla public void onFinish() { 86f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla dismiss(); 87f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla if (mOnCountDownExpiredListener != null) 88f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla mOnCountDownExpiredListener.onCountDownExpired(); 89f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla } 90f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla }.start(); 91f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla } 92f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla }); 93f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla } 94f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla 95f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla @Override 960271fd661dc547e15495e31913d5cde4f122dde9Suprabh Shukla public void onStop() { 97f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla if (mCountDownTimer != null) { 98f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla mCountDownTimer.cancel(); 99f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla } 100f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla } 101f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla 102f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla interface OnCountDownExpiredListener { 103f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla void onCountDownExpired(); 104f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla } 105f38b1d7abee34722e9293f7ed78875290369b850Suprabh Shukla} 106