Reputation: 81
There are MainActivity from which caused the alert dialog box, change the volume when the open alert dialog did not work, put the OnKeyListener and now when you press the volume buttons are processed twice, with the listener who is in MainActivity processes clicking correctly, help me understand
Code in MainActivity
public void ShowTrack(final String smetaout,String stitleout){
if (MediaService.isPlayingDubstep || MediaService.isPlayingLiquid || MediaService.isPlayingMain == true) {
allbtnStop();
}
alert = new AlertDialog.Builder(this).create();
alert.setTitle(stitleout);
alert.setCanceledOnTouchOutside(false);
LayoutInflater li = getLayoutInflater();
View v = li.inflate(R.layout.track_view, null);
Log.d("My Webview", "ShowTrack");
final WebView wv = (WebView) v.findViewById(R.id.trackView);
wv.setVisibility(View.GONE);
playTrack = (Button) v.findViewById(R.id.playTrack);
progress = (ProgressBar) v.findViewById(R.id.progress);
playTrack.setVisibility(View.INVISIBLE);
closeTrack = (Button) v.findViewById(R.id.close);
colors_sel = mSettings.getString("colors", "1");
if (colors_sel.equals("0")) {
playTrack.setBackgroundResource(R.drawable.stop_button_red);
}
else if (colors_sel.equals("1")) {
playTrack.setBackgroundResource(R.drawable.stop_button_green);
}
else if (colors_sel.equals("2")) {
playTrack.setBackgroundResource(R.drawable.stop_button_blue);
}
progress.setVisibility(View.VISIBLE);
wv.getSettings().setJavaScriptEnabled(true);
wv.loadUrl(smetaout);
wv.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (!loadingFinished) {
redirect = true;
}
loadingFinished = false;
view.loadUrl(url);
Log.d("shouldOverrideUrlLoading", url);
MediaService.releaseMP();
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
if(!redirect){
loadingFinished = true;
Log.d("onPageFinished", "loadingFinished = true;");
}
if(loadingFinished && !redirect){
//HIDE LOADING IT HAS FINISHED
if (loadtrack == true){
myUri = Uri.parse(url);
context = getApplicationContext();
at = (ActionTask) new ActionTask().execute();
playTrack.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
colors_sel = mSettings.getString("colors", "1");
if (MediaService.isPlayingTrack) {
MediaService.pauseT();
if (colors_sel.equals("0")) {
playTrack.setBackgroundResource(R.drawable.play_button_red);
} else if (colors_sel.equals("1")) {
playTrack.setBackgroundResource(R.drawable.play_button_green);
} else if (colors_sel.equals("2")) {
playTrack.setBackgroundResource(R.drawable.play_button_blue);
}
}else{
visibleProgressTrack();
MediaService.startT();
if (colors_sel.equals("0")) {
playTrack.setBackgroundResource(R.drawable.stop_button_red);
} else if (colors_sel.equals("1")) {
playTrack.setBackgroundResource(R.drawable.stop_button_green);
} else if (colors_sel.equals("2")) {
playTrack.setBackgroundResource(R.drawable.stop_button_blue);
}
}
Log.i("ShowTrack","isPlayingTrack="+MediaService.isPlayingTrack);
}
});
}
loadtrack = !loadtrack;
} else{
redirect = false;
}
}
});
alert.setView(v);
closeTrack.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
MediaService.isPlayingTrack = false;
if (MediaService.mediaPlayer != null) {
if (at != null){
at.cancel(false);
}
MediaService.stopT();
MediaService.releaseMP();
}
alert.dismiss();
}
});
alert.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
MediaService.isPlayingTrack = false;
if (MediaService.mediaPlayer != null) {
if (at != null){
at.cancel(false);
}
MediaService.stopT();
Log.i("Key","Back");
MediaService.releaseMP();
}
dialog.dismiss();
return true;
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP){
int index = seekbar.getProgress();
seekbar.setProgress(index + 1);
Log.i("onKey","seekbar="+index);
return true;
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){
int index = seekbar.getProgress();
seekbar.setProgress(index - 1);
Log.i("onKey","seekbar="+index);
return true;
}
return onKeyDown(keyCode, event);
}
});
alert.show();
}
public static void initBar(SeekBar bar, final int stream) {
bar.setMax(am.getStreamMaxVolume(stream));
bar.setProgress(am.getStreamVolume(stream));
bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar bar, int progress,
boolean fromUser) {
am.setStreamVolume(stream, progress, AudioManager.FLAG_PLAY_SOUND);
am.setStreamVolume(stream, progress, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
}
public void onStartTrackingTouch(SeekBar bar) {
// no-op
}
public void onStopTrackingTouch(SeekBar bar) {
// no-op
}
});
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
//ProgressBar seekbar = (SeekBar)findViewById(R.id.seekBar1);
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP){
int index = seekbar.getProgress();
seekbar.setProgress(index + 1);
Log.i("onKeyDown","seekbar="+index);
return true;
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){
int index = seekbar.getProgress();
seekbar.setProgress(index - 1);
Log.i("onKeyDown","seekbar="+index);
return true;
} else if (keyCode == KeyEvent.KEYCODE_BACK){
if (exit==false)
Toast.makeText(this, R.string.exit, Toast.LENGTH_SHORT).show();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
exit = false;
}
}, 3000);
if (exit) {
stopService();
unregisterReceiver(myReceiver);
CallReceiver.state = false;
MainActivity.this.finish();
}
exit = true;
return true;
}
return super.onKeyDown(keyCode, event);
}
Upvotes: 4
Views: 1217
Reputation: 9561
onKeyListener detects key press down AND key press up. These 2 events are triggered in onKeyListener and cause the event to trigger twice.
Check for just the key press up event only... It seems you're not detecting this type of event in your onKey methods. Something like this in your onKey method should prevent double firing
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction()==KeyEvent.ACTION_UP) {
// your logic now goes in here
}
.....
}
Upvotes: 5