Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OnKeyListener handles pressed twice

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); 
}
like image 559
madcrinkle Avatar asked Oct 19 '25 02:10

madcrinkle


1 Answers

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
    }
    .....
}
like image 155
angryITguy Avatar answered Oct 21 '25 15:10

angryITguy



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!