blob: ba4a9577d64883ab3d46da4e854dba22db52e2e4 [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 android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Vibrator;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.android.internal.telephony.cat.TextMessage;
import com.android.internal.telephony.cat.ToneSettings;
/**
* Activity used for PLAY TONE command.
*
*/
public class ToneDialog extends Activity {
TextMessage toneMsg = null;
ToneSettings settings = null;
TonePlayer player = null;
/**
* Handler used to stop tones from playing when the duration ends.
*/
Handler mToneStopper = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_ID_STOP_TONE:
sendResponse(StkAppService.RES_ID_DONE);
finish();
break;
}
}
};
Vibrator mVibrator = new Vibrator();
// Message id to signal tone duration timeout.
private static final int MSG_ID_STOP_TONE = 0xda;
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
initFromIntent(getIntent());
// remove window title
View title = findViewById(com.android.internal.R.id.title);
title.setVisibility(View.GONE);
// set customized content view
setContentView(R.layout.stk_tone_dialog);
TextView tv = (TextView) findViewById(R.id.message);
ImageView iv = (ImageView) findViewById(R.id.icon);
// set text and icon
tv.setText(toneMsg.text);
if (toneMsg.icon == null) {
iv.setImageResource(com.android.internal.R.drawable.ic_volume);
} else {
iv.setImageBitmap(toneMsg.icon);
}
// Start playing tone and vibration
player = new TonePlayer();
player.play(settings.tone);
int timeout = StkApp.calculateDurationInMilis(settings.duration);
if (timeout == 0) {
timeout = StkApp.TONE_DFEAULT_TIMEOUT;
}
mToneStopper.sendEmptyMessageDelayed(MSG_ID_STOP_TONE, timeout);
if (settings.vibrate) {
mVibrator.vibrate(timeout);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
mToneStopper.removeMessages(MSG_ID_STOP_TONE);
player.stop();
player.release();
mVibrator.cancel();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
sendResponse(StkAppService.RES_ID_END_SESSION);
finish();
break;
}
return false;
}
private void initFromIntent(Intent intent) {
if (intent == null) {
finish();
}
toneMsg = intent.getParcelableExtra("TEXT");
settings = intent.getParcelableExtra("TONE");
}
private void sendResponse(int resId) {
Bundle args = new Bundle();
args.putInt(StkAppService.OPCODE, StkAppService.OP_RESPONSE);
args.putInt(StkAppService.RES_ID, resId);
startService(new Intent(this, StkAppService.class).putExtras(args));
}
}