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