blob: 127f51b8a033bac17c18425e622acf6b6b20a4ea [file] [log] [blame]
/*
* Copyright (C) 2007 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.stk;
import com.android.internal.telephony.cat.TextMessage;
import android.app.Activity;
import android.content.Intent;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
/**
* AlretDialog used for DISPLAY TEXT commands.
*
*/
public class StkDialogActivity extends Activity implements View.OnClickListener {
// members
TextMessage mTextMsg;
Handler mTimeoutHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
case MSG_ID_TIMEOUT:
sendResponse(StkAppService.RES_ID_TIMEOUT);
finish();
break;
}
}
};
//keys) for saving the state of the dialog in the icicle
private static final String TEXT = "text";
// message id for time out
private static final int MSG_ID_TIMEOUT = 1;
// buttons id
public static final int OK_BUTTON = R.id.button_ok;
public static final int CANCEL_BUTTON = R.id.button_cancel;
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
initFromIntent(getIntent());
if (mTextMsg == null) {
finish();
return;
}
requestWindowFeature(Window.FEATURE_LEFT_ICON);
Window window = getWindow();
setContentView(R.layout.stk_msg_dialog);
TextView mMessageView = (TextView) window
.findViewById(R.id.dialog_message);
Button okButton = (Button) findViewById(R.id.button_ok);
Button cancelButton = (Button) findViewById(R.id.button_cancel);
okButton.setOnClickListener(this);
cancelButton.setOnClickListener(this);
setTitle(mTextMsg.title);
if (!(mTextMsg.iconSelfExplanatory && mTextMsg.icon != null)) {
mMessageView.setText(mTextMsg.text);
}
if (mTextMsg.icon == null) {
window.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,
com.android.internal.R.drawable.stat_notify_sim_toolkit);
} else {
window.setFeatureDrawable(Window.FEATURE_LEFT_ICON,
new BitmapDrawable(mTextMsg.icon));
}
}
public void onClick(View v) {
String input = null;
switch (v.getId()) {
case OK_BUTTON:
sendResponse(StkAppService.RES_ID_CONFIRM, true);
finish();
break;
case CANCEL_BUTTON:
sendResponse(StkAppService.RES_ID_CONFIRM, false);
finish();
break;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
sendResponse(StkAppService.RES_ID_BACKWARD);
finish();
break;
}
return false;
}
@Override
public void onResume() {
super.onResume();
startTimeOut(mTextMsg.userClear);
}
@Override
public void onPause() {
super.onPause();
cancelTimeOut();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(TEXT, mTextMsg);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mTextMsg = savedInstanceState.getParcelable(TEXT);
}
private void sendResponse(int resId, boolean confirmed) {
Bundle args = new Bundle();
args.putInt(StkAppService.OPCODE, StkAppService.OP_RESPONSE);
args.putInt(StkAppService.RES_ID, resId);
args.putBoolean(StkAppService.CONFIRMATION, confirmed);
startService(new Intent(this, StkAppService.class).putExtras(args));
}
private void sendResponse(int resId) {
sendResponse(resId, true);
}
private void initFromIntent(Intent intent) {
if (intent != null) {
mTextMsg = intent.getParcelableExtra("TEXT");
} else {
finish();
}
}
private void cancelTimeOut() {
mTimeoutHandler.removeMessages(MSG_ID_TIMEOUT);
}
private void startTimeOut(boolean waitForUserToClear) {
// Reset timeout.
cancelTimeOut();
int dialogDuration = StkApp.calculateDurationInMilis(mTextMsg.duration);
// If duration is specified, this has priority. If not, set timeout
// according to condition given by the card.
if (dialogDuration == 0) {
if (waitForUserToClear) {
dialogDuration = StkApp.DISP_TEXT_WAIT_FOR_USER_TIMEOUT;
} else {
dialogDuration = StkApp.DISP_TEXT_CLEAR_AFTER_DELAY_TIMEOUT;
}
}
mTimeoutHandler.sendMessageDelayed(mTimeoutHandler
.obtainMessage(MSG_ID_TIMEOUT), dialogDuration);
}
}