Home > Tricks & Tips > Handle hard-key MENU long press event

Handle hard-key MENU long press event


Quick snippet:

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
	    if (keyCode == KeyEvent.KEYCODE_MENU) {
	        event.startTracking();
	        return true;
	    }
	    return super.onKeyDown(keyCode, event);
	}

	@Override
	public boolean onKeyLongPress(int keyCode, KeyEvent event) {
	    if (keyCode == KeyEvent.KEYCODE_MENU) {
	        return true;
	    }
	    return super.onKeyDown(keyCode, event);
	}

Cheers,
Pete Houston

Advertisements
  1. ashwini
    April 20, 2012 at 2:36 pm

    thts my code for ArtistAlbumsPlaybackStress ,i want long press event should be occurred when i press center button from artist folder through emulator ,pls correct the code if am wrong .

  2. ashwini
    April 20, 2012 at 2:34 pm

    /*
    * Copyright (C) 2008 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.music.tests.stress;

    import android.app.Activity;
    import android.app.ActivityManager;
    import android.app.Instrumentation;
    import android.app.Instrumentation.ActivityMonitor;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.SystemClock;
    import android.test.ActivityInstrumentationTestCase;
    import android.test.suitebuilder.annotation.LargeTest;
    import android.view.KeyEvent;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnTouchListener;
    import android.widget.FrameLayout;

    import com.android.music.ArtistAlbumBrowserActivity;
    import com.android.music.tests.MusicPlayerNames;

    public class ArtistAlbumsPlaybackStress extends ActivityInstrumentationTestCase
    {

    private Activity browseActivity;
    private String[] testing;
    private String TAG = “ArtistAlbumsPlaybackStress”;

    public ArtistAlbumsPlaybackStress() {
    super(“com.android.music”,ArtistAlbumBrowserActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
    super.setUp();
    }

    @Override
    protected void tearDown() throws Exception {
    super.tearDown();
    }

    /*
    * Test case: Keeps launching music playback from Albums and then go
    * back to the album screen
    * Verification: Check if it is in low memory
    * The test depends on the test media in the sdcard
    */

    @LargeTest
    public void testArtistAlbumPlay() {
    Instrumentation inst = getInstrumentation();
    try{
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_LEFT);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    Thread.sleep(MusicPlayerNames.WAIT_LONG_TIME);
    for(int i=0; i< MusicPlayerNames.NO_ARTISTS_TOBE_PLAYED; i++){
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    Thread.sleep(MusicPlayerNames.WAIT_LONG_TIME);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
    }
    }catch (Exception e){
    Log.v(TAG, e.toString());
    }
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);

    //Verification: check if it is in low memory
    ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
    ((ActivityManager)getActivity().getSystemService(Context.ACTIVITY_SERVICE)).getMemoryInfo(mi);
    assertFalse(TAG, mi.lowMemory);
    }

    @LargeTest
    public void testPlaylistAlbumPlay() {
    Instrumentation inst = getInstrumentation();
    try{
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_LEFT);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_RIGHT);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_RIGHT);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_UP);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_UP);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    Thread.sleep(MusicPlayerNames.WAIT_LONG_TIME);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);

    for(int i=0; i< MusicPlayerNames.NO_ARTISTS_TOBE_PLAYED; i++){
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    Thread.sleep(MusicPlayerNames.WAIT_LONG_TIME);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
    }
    }catch (Exception e){
    Log.v(TAG, e.toString());
    }
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);

    //Verification: check if it is in low memory
    ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
    ((ActivityManager)getActivity().getSystemService(Context.ACTIVITY_SERVICE)).getMemoryInfo(mi);
    assertFalse(TAG, mi.lowMemory);
    }

    @LargeTest
    public void testShuffleArtistAlbumPlay() {
    Instrumentation inst = getInstrumentation();
    try{
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_LEFT);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_RIGHT);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_RIGHT);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_UP);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    Thread.sleep(MusicPlayerNames.WAIT_LONG_TIME);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    for(int i=0; i< MusicPlayerNames.NO_ARTISTS_TOBE_PLAYED; i++){
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    Thread.sleep(MusicPlayerNames.WAIT_LONG_TIME);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
    }
    }catch (Exception e){
    Log.v(TAG, e.toString());
    }
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);

    //Verification: check if it is in low memory
    ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
    ((ActivityManager)getActivity().getSystemService(Context.ACTIVITY_SERVICE)).getMemoryInfo(mi);
    assertFalse(TAG, mi.lowMemory);
    }

    @LargeTest
    public void testRepeatArtistAlbumPlay() {
    Instrumentation inst = getInstrumentation();
    try{
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_LEFT);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_RIGHT);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    Thread.sleep(MusicPlayerNames.WAIT_LONG_TIME);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    Thread.sleep(MusicPlayerNames.WAIT_LONG_TIME);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    for(int i=0; i< MusicPlayerNames.NO_ARTISTS_TOBE_PLAYED; i++){
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    Thread.sleep(MusicPlayerNames.WAIT_LONG_TIME);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
    }
    }catch (Exception e){
    Log.v(TAG, e.toString());
    }
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);

    //Verification: check if it is in low memory
    ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
    ((ActivityManager)getActivity().getSystemService(Context.ACTIVITY_SERVICE)).getMemoryInfo(mi);
    assertFalse(TAG, mi.lowMemory);
    }

    @LargeTest
    public void testMenuArtistAlbumPlay() {
    Instrumentation inst = getInstrumentation();
    try{
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_RIGHT);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    Thread.sleep(MusicPlayerNames.WAIT_LONG_TIME);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
    for(int i=0; i< MusicPlayerNames.NO_ARTISTS_TOBE_PLAYED; i++){
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
    Thread.sleep(MusicPlayerNames.WAIT_LONG_TIME);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
    }
    }catch (Exception e){
    Log.v(TAG, e.toString());
    }
    inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);

    //Verification: check if it is in low memory
    ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
    ((ActivityManager)getActivity().getSystemService(Context.ACTIVITY_SERVICE)).getMemoryInfo(mi);
    assertFalse(TAG, mi.lowMemory);
    }

    public boolean onKeyDown(int keyCode, KeyEvent event) {
    try{
    if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER)
    event.startTracking();
    return true;
    }
    return onKeyDown(keyCode, event);
    }
    }catch(Exception e){}
    }

    public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    try{
    if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER)
    return true;
    }
    return onKeyDown(keyCode, event);
    }
    }catch(Exception e){}
    }
    }

  3. ashwini
    April 20, 2012 at 2:33 pm

    some one help me out

  4. Android dev
    November 20, 2011 at 10:05 pm

    This doesnt work

    • November 20, 2011 at 10:13 pm

      Yes, it works. Use a real device, not emulator!

      • Android dev
        November 20, 2011 at 10:36 pm

        Sorry but it doesnt work on real device.
        I tested on Galaxy S running under android 2.2 but it doesnt work.

        Thanks.

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: