13d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*
23d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Copyright (C) 2014 The Android Open Source Project
33d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
43d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Licensed under the Apache License, Version 2.0 (the "License");
53d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * you may not use this file except in compliance with the License.
63d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * You may obtain a copy of the License at
73d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
83d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *      http://www.apache.org/licenses/LICENSE-2.0
93d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Unless required by applicable law or agreed to in writing, software
113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * distributed under the License is distributed on an "AS IS" BASIS,
123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * See the License for the specific language governing permissions and
143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * limitations under the License.
153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambypackage com.android.omadm.service;
183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.content.BroadcastReceiver;
203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.content.Context;
213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.content.Intent;
223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.content.IntentFilter;
233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.text.InputType;
243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.util.Log;
253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport java.util.concurrent.locks.Condition;
273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport java.util.concurrent.locks.Lock;
283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport java.util.concurrent.locks.ReentrantLock;
293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambypublic class DMAlert {
313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* DMServiceAlert Response Code */
333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private static final int DM_SERVICE_ALERT_RESP_FAIL = -1;
343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_RESP_SUCCESS = 0;
363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_RESP_NO = 1;
383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_RESP_YES = 2;
403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_RESP_CANCEL = 3;
423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_RESP_TIMEOUT = 4;
443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // DMServiceAlert Input Type
463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private static final int DM_SERVICE_ALERT_INPUT_ALPHA = 0;
473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private static final int DM_SERVICE_ALERT_INPUT_NUMERIC = 1;
493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private static final int DM_SERVICE_ALERT_INPUT_DATE = 2;
513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private static final int DM_SERVICE_ALERT_INPUT_TIME = 3;
533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private static final int DM_SERVICE_ALERT_INPUT_PHONE_NUM = 4;
553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private static final int DM_SERVICE_ALERT_INPUT_IP_ADDR = 5;
573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // DMServiceAlert Echo Type
593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_ECHO_TEXT = 0;
603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private static final int DM_SERVICE_ALERT_ECHO_PASSWD = 1;
623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // DMServiceAlert Icon Type
643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private static final int DM_SERVICE_ALERT_ICON_GENERIC = 0;
653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_ICON_PROGRESS = 1;
673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_ICON_OK = 2;
693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_ICON_ERROR = 3;
713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_ICON_CONFIRM = 4;
733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_ICON_ACTION = 5;
753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_ICON_INFO = 6;
773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // DMServiceAlert Title Type
793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private static final int DM_SERVICE_ALERT_TITLE_DEVICE_MGMT = 0;
803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_TITLE_SYSTEM_UPDATE = 1;
823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_TITLE_NEED_AUTHENTICATION = 2;
843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_TITLE_UPDATE_COMPLETE = 3;
863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private static final int DM_SERVICE_ALERT_TITLE_SYSTEM_MESSAGE = 4;
883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_TITLE_AUTHENTICATION_FAILED = 5;
903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_TITLE_UPDATE_ERROR = 6;
923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_TITLE_UPDATE_CANCELLED = 7;
943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_TITLE_PROFILE_FOR_BROWSER = 8;
963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_TITLE_PROFILE_FOR_MMS = 9;
983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_TITLE_CONNECTION_FAILED = 10;
1003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_TITLE_CONNECTION_FAILURE = 11;
1023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public static final int DM_SERVICE_ALERT_TITLE_SW_UPDATE = 12;
1043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private final Context mCtx;
1063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private boolean mUIMode;
1083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private Lock mLock;
1103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private Condition mCond;
1123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private int mResultCode;
1143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private String mResultData;
1163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private int mResultCheckedItem;
1183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private boolean[] mResultCheckedItems;
1203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public DMAlert(Context ctx) {
1223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mCtx = ctx;
1233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mUIMode = true;
1243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
1253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public void setUIMode(boolean uiMode) {
1273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mUIMode = uiMode;
1283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
1293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // used for the test only
1313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public boolean getUIMode() {
1323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return mUIMode;
1333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
1343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /**
1363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * Display a text message. Called from JNI code.
1373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     *
1383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param minDisplayTime minimum display time, in seconds.
1393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param msg            messages to display
1403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param title          resource ID for dialog title
1413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param icon           resource ID for dialog icon
1423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @return SYNCML_DM_SUCCESS on successful completion; SYNCML_DM_FAIL or another more specific
1433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     *         error code on failure.
1443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     */
1453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public int showDisplayAlert(int minDisplayTime, String msg, int title, int icon) {
1463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        //if ( !mUIMode) return DM_SERVICE_ALERT_RESP_FAIL;
1473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        IntentFilter filter = new IntentFilter();
1493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        filter.addAction(DMIntent.DM_ALERT_DLG_CLOSED);
1503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        Intent intent = new Intent(DMIntent.SHOW_DISPLAY_ALERT_DLG);
1523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
1533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.setClass(mCtx, DMAlertActivity.class);
1543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Message", msg);
1563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Title", getTitle(title));
1573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Icon", getIcon(icon));
1583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Timeout", minDisplayTime);
1593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        try {
1613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mCtx.startActivity(intent);
1623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        } catch (RuntimeException e) {
1633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            e.printStackTrace();
1643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            return DM_SERVICE_ALERT_RESP_FAIL;
1653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
1663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return DM_SERVICE_ALERT_RESP_SUCCESS;
1683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
1693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /**
1713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * Display a confirmation alert dialog: user can confirm or cancel the action. Called from JNI
1723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * code.
1733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     *
1743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param maxDisplayTime maximum display time (for timeout), in seconds.
1753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param msg            messages to display
1763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param title          resource ID for dialog title
1773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param icon           resource ID for dialog icon
1783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @return SYNCML_DM_SUCCESS on successful completion; SYNCML_DM_FAIL or another more specific
1793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     *         error code on failure.
1803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     */
1813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public int showConfirmAlert(int maxDisplayTime, String msg, int title, int icon) {
1823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        //if ( !mUIMode) return DM_SERVICE_ALERT_RESP_FAIL;
1833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mLock = new ReentrantLock();
1853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mCond = mLock.newCondition();
1863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        IntentFilter filter = new IntentFilter();
1883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        filter.addAction(DMIntent.DM_ALERT_DLG_CLOSED);
1893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mCtx.registerReceiver(mAlertCloseListener, filter);
1903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        Intent intent = new Intent(DMIntent.SHOW_CONFIRM_ALERT_DLG);
1923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
1933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.setClass(mCtx, DMAlertActivity.class);
1943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Message", msg);
1963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Title", getTitle(title));
1973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Icon", getIcon(icon));
1983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Timeout", maxDisplayTime);
1993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mCtx.startActivity(intent);
2013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mLock.lock();
2033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        try {
2043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mCond.await();
2053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        } catch (InterruptedException e) {
2063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            e.printStackTrace();
2073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        } finally {
2083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mLock.unlock();
2093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mCtx.unregisterReceiver(mAlertCloseListener);
2103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
2113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return mResultCode;
2133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
2143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /**
2163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * Display a text input message box for user to enter input. Called from JNI code.
2173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     *
2183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param maxDisplayTime maximum display time (for timeout), in seconds.
2193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param msg            messages to display
2203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param defaultText    default user action when timeout
2213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param maxLength      length allowed in user input
2223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param inputType      data format as specified in DM_ALERT_INPUT_T
2233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param echoType       whether to echo user input (hidden for password ) as specified in
2243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     *                       DM_ALERT_ECHO_T
2253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param title          either DM_SERVICE_ALERT_TITLE_DEVICE_MGMT or DM_SERVICE_ALERT_TITLE_SYSTEM_MESSAGE
2263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param icon           is DM_SERVICE_ALERT_ICON_GENERIC
2273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @return SYNCML_DM_SUCCESS on successful completion; SYNCML_DM_FAIL or another more specific
2283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     *         error code on failure.
2293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     */
2303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public String showTextInputAlert(int maxDisplayTime, String msg, String defaultText,
2313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            int maxLength, int inputType, int echoType,
2323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            int title, int icon) {
2333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        //if ( !mUIMode) return String.valueOf(DM_SERVICE_ALERT_RESP_FAIL);
2343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mLock = new ReentrantLock();
2363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mCond = mLock.newCondition();
2373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        IntentFilter filter = new IntentFilter();
2393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        filter.addAction(DMIntent.DM_ALERT_DLG_CLOSED);
2403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mCtx.registerReceiver(mAlertCloseListener, filter);
2413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        Intent intent = new Intent(DMIntent.SHOW_TEXTINPUT_ALERT_DLG);
2433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
2443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.setClass(mCtx, DMAlertActivity.class);
2453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Message", msg);
2473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Title", getTitle(title));
2483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Icon", getIcon(icon));
2493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Timeout", maxDisplayTime);
2503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("DefaultText", defaultText);
2513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("MaxLength", maxLength);
2523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("InputType", getInputType(inputType, echoType));
2533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        Log.d("showTextInputAlert", "Dialog Intent: " + intent);
2553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mCtx.startActivity(intent);
2573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mLock.lock();
2593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        try {
2603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mCond.await();
2613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        } catch (InterruptedException e) {
2623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            e.printStackTrace();
2633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        } finally {
2643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mLock.unlock();
2653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mCtx.unregisterReceiver(mAlertCloseListener);
2663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
2673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return String.valueOf(mResultCode) + ':' + mResultData;
2693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
2703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /**
2723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * Display a single choice message box for user to pick up one entry. Called from JNI code.
2733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     *
2743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param maxDisplayTime maximum display time (for timeout), in seconds.
2753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param msg            messages to display
2763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param choices        an array of strings containing the text for each choice
2773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param checkedItem    the default checked entry
2783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param title          resource ID for dialog title
2793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param icon           resource ID for dialog icon
2803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @return SYNCML_DM_SUCCESS on successful completion; SYNCML_DM_FAIL or another more specific
2813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     *         error code on failure.
2823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     */
2833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public String showSingleChoiceAlert(int maxDisplayTime, String msg, String[] choices,
2843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            int checkedItem, int title, int icon) {
2853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        //if ( !mUIMode) return String.valueOf(DM_SERVICE_ALERT_RESP_FAIL);
2863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mLock = new ReentrantLock();
2883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mCond = mLock.newCondition();
2893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        IntentFilter filter = new IntentFilter();
2913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        filter.addAction(DMIntent.DM_ALERT_DLG_CLOSED);
2923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mCtx.registerReceiver(mAlertCloseListener, filter);
2933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        Intent intent = new Intent(DMIntent.SHOW_SINGLECHOICE_ALERT_DLG);
2953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
2963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.setClass(mCtx, DMAlertActivity.class);
2973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Message", msg);
2993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Title", getTitle(title));
3003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Icon", getIcon(icon));
3013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Timeout", maxDisplayTime);
3023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Choices", choices);
3033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("CheckedItem", checkedItem);
3043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        Log.d("showSingleChoiceAlert", "Dialog Intent: " + intent);
3063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mCtx.startActivity(intent);
3083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mLock.lock();
3103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        try {
3113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mCond.await();
3123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        } catch (InterruptedException e) {
3133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            e.printStackTrace();
3143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        } finally {
3153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mLock.unlock();
3163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mCtx.unregisterReceiver(mAlertCloseListener);
3173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
3183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return String.valueOf(mResultCode) + ':' + mResultCheckedItem;
3203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
3213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /**
3233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * Display a multiple choice message box for user to pick up zero to many entry. Called from JNI
3243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * code.
3253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     *
3263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param maxDisplayTime maximum display time (for timeout), in seconds.
3273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param msg            messages to display
3283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param choices        an array of strings to hold text for each choice
3293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param checkedItems   an array of booleans to indicate the checked items
3303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param title          resource ID for dialog title
3313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param icon           resource ID for dialog icon
3323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @return SYNCML_DM_SUCCESS on successful completion; SYNCML_DM_FAIL or another more specific
3333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     *         error code on failure.
3343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     */
3353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public int showMultipleChoiceAlert(int maxDisplayTime, String msg, String[] choices,
3363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            boolean[] checkedItems, int title, int icon) {
3373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        //if ( !mUIMode) return DM_SERVICE_ALERT_RESP_FAIL;
3383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mLock = new ReentrantLock();
3403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mCond = mLock.newCondition();
3413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        IntentFilter filter = new IntentFilter();
3433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        filter.addAction(DMIntent.DM_ALERT_DLG_CLOSED);
3443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mCtx.registerReceiver(mAlertCloseListener, filter);
3453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        Intent intent = new Intent(DMIntent.SHOW_MULTICHOICE_ALERT_DLG);
3473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
3483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.setClass(mCtx, DMAlertActivity.class);
3493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Message", msg);
3513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Title", getTitle(title));
3523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Icon", getIcon(icon));
3533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Timeout", maxDisplayTime);
3543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Choices", choices);
3553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("CheckedItems", checkedItems);
3563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        Log.d("showMultiChoiceAlert", "Dialog Intent: " + intent);
3583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mCtx.startActivity(intent);
3603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        mLock.lock();
3623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        try {
3633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mCond.await();
3643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        } catch (InterruptedException e) {
3653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            Log.e("DMAlert", "lock/await interrupted", e);  // FIXME logging
3663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        } finally {
3673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mLock.unlock();
3683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mCtx.unregisterReceiver(mAlertCloseListener);
3693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
3703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        int checkedItemsLength = checkedItems.length;
3723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        for (int i = 0; DM_SERVICE_ALERT_RESP_YES == mResultCode && i < checkedItemsLength; i++) {
3733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            checkedItems[i] = mResultCheckedItems[i];
3743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
3753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return mResultCode;
3773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
3783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /**
3803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * Display a progress bar. FIXME: remove if unused.
3813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     *
3823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param minDisplayTime minimum display time, in seconds.
3833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @param msg            messages to display
3843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @return Upon successful completion, the SYNCML_DM_SUCCESS is returned, otherwise
3853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     *         SYNCML_DM_FAIL or other more specific error codes.
3863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     */
3873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public int showProgressAlert(int minDisplayTime, String msg, int title, int icon) {
3883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        IntentFilter filter = new IntentFilter();
3893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        filter.addAction(DMIntent.DM_ALERT_DLG_CLOSED);
3903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        Intent intent = new Intent(DMIntent.SHOW_PROGRESS_ALERT_DLG);
3923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
3933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.setClass(mCtx, DMAlertActivity.class);
3943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Message", msg);
3963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Title", getTitle(title));
3973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Icon", getIcon(icon));
3983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.putExtra("Timeout", minDisplayTime);
3993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        try {
4013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mCtx.startActivity(intent);
4023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        } catch (Exception e) {
4033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            e.printStackTrace();
4043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            return DM_SERVICE_ALERT_RESP_FAIL;
4053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
4063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return DM_SERVICE_ALERT_RESP_SUCCESS;
4083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
4093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /**
4113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * Hide a progress bar. FIXME: remove if unneeded.
4123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     *
4133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * @return Upon successful completion, the SYNCML_DM_SUCCESS is returned, otherwise
4143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     *         SYNCML_DM_FAIL or other more specific error codes.
4153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     */
4163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public int hideProgressAlert() {
4173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        IntentFilter filter = new IntentFilter();
4183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        filter.addAction(DMIntent.DM_ALERT_DLG_CLOSED);
4193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        Intent intent = new Intent(DMIntent.HIDE_PROGRESS_ALERT_DLG);
4213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
4223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.setClass(mCtx, DMAlertActivity.class);
4233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        try {
4253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mCtx.startActivity(intent);
4263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        } catch (Exception e) {
4273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            e.printStackTrace();
4283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            return DM_SERVICE_ALERT_RESP_FAIL;
4293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
4303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return DM_SERVICE_ALERT_RESP_SUCCESS;
4323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
4333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /**
4353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * Cancel alert when DM session times out.
4363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     */
4373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public void cancelSession() {
4383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if (!mUIMode) {
4393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            return;
4403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
4413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        Intent intent = new Intent(DMIntent.CANCEL_ALERT_DLG);
4433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
4443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        intent.setClass(mCtx, DMAlertActivity.class);
4453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        try {
4473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mCtx.startActivity(intent);
4483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        } catch (Exception e) {
4493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            e.printStackTrace();
4503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
4513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
4523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private String getTitle(int t) {
4543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        switch (t) {
4553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            case DM_SERVICE_ALERT_TITLE_DEVICE_MGMT:
4563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                return mCtx.getResources().getString(R.string.DM_SERVICE_ALERT_TITLE_DEVICE_MGMT);
4573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            case DM_SERVICE_ALERT_TITLE_SYSTEM_MESSAGE:
4583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                return mCtx.getResources()
4593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                        .getString(R.string.DM_SERVICE_ALERT_TITLE_SYSTEM_MESSAGE);
4603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            default:
4613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                break;
4623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
4633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return "Title ID: " + t;
4643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
4653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private static int getIcon(int i) {
4673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        switch (i) {
4683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            case DM_SERVICE_ALERT_ICON_GENERIC:
4693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                return R.drawable.alert_dialog_icon;
4703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            default:
4713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                break;
4723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
4733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return R.drawable.alert_dialog_icon;
4743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
4753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private static int getInputType(int i, int e) {
4773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        int t = InputType.TYPE_CLASS_TEXT;
4783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        switch (i) {
4793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            case DM_SERVICE_ALERT_INPUT_ALPHA:
4803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                t = InputType.TYPE_CLASS_TEXT;
4813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                break;
4823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            case DM_SERVICE_ALERT_INPUT_NUMERIC:
4833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                t = InputType.TYPE_CLASS_NUMBER;
4843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                break;
4853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            case DM_SERVICE_ALERT_INPUT_DATE:
4863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                t = InputType.TYPE_DATETIME_VARIATION_DATE;
4873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                break;
4883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            case DM_SERVICE_ALERT_INPUT_TIME:
4893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                t = InputType.TYPE_DATETIME_VARIATION_TIME;
4903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                break;
4913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            case DM_SERVICE_ALERT_INPUT_PHONE_NUM:
4923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                t = InputType.TYPE_CLASS_PHONE;
4933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                break;
4943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            case DM_SERVICE_ALERT_INPUT_IP_ADDR:
4953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                t = InputType.TYPE_CLASS_TEXT;
4963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                break;
4973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            default:
4983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                break;
4993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
5003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if (e == DM_SERVICE_ALERT_ECHO_PASSWD) {
5023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            t |= InputType.TYPE_TEXT_VARIATION_PASSWORD;
5033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
5043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return t;
5053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
5063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    private final BroadcastReceiver mAlertCloseListener = new BroadcastReceiver() {
5083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        @Override
5093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        public void onReceive(Context context, Intent intent) {
5103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mLock.lock();
5113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            try {
5123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                onReceiveLocked(intent);
5133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            } finally {
5143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                mLock.unlock();
5153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
5163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
5173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        private void onReceiveLocked(Intent intent) {
5193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mResultCode = intent.getIntExtra("ResultCode", DM_SERVICE_ALERT_RESP_SUCCESS);
5203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if (DMClientService.DBG) {
5213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                Log.d("mAlertCloseListener", "Dialog ResultCode: " + mResultCode);
5223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
5233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mResultData = intent.getStringExtra("ResultData");
5253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if (null != mResultData) {
5263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if (DMClientService.DBG) {
5273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    Log.d("mAlertCloseListener", "Dialog ResultData: " + mResultData);
5283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
5293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
5303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mResultCheckedItem = intent.getIntExtra("ResultCheckedItem", -1);
5323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if (-1 != mResultCheckedItem) {
5333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if (DMClientService.DBG) {
5343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    Log.d("mAlertCloseListener", "Dialog ResultCheckedItem: " + mResultCheckedItem);
5353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
5363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
5373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            boolean[] resultCheckedItems = intent.getBooleanArrayExtra("ResultCheckedItems");
5393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mResultCheckedItems = resultCheckedItems;
5403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if (DMClientService.DBG && resultCheckedItems != null) {
5423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                int resultCheckedItemsLength = resultCheckedItems.length;
5433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                for (int i = 0; i < resultCheckedItemsLength; i++) {
5443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    Log.d("mAlertCloseListener",
5453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                            "Dialog ResultCheckedItems " + i + ": " + resultCheckedItems[i]);
5463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
5473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
5483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            mCond.signalAll();
5503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
5513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    };
5523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
553