@ -750,52 +750,70 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements
@Override
@Override
public boolean dispatchKeyEvent ( KeyEvent event ) {
public boolean dispatchKeyEvent ( KeyEvent event ) {
// Keyboard shortcuts
// Keyboard shortcuts
if ( event . isCtrlPressed ( ) & & event . getAction ( ) = = KeyEvent . ACTION_DOWN ) {
if ( event . getAction ( ) = = KeyEvent . ACTION_DOWN ) {
switch ( event . getKeyCode ( ) ) {
if ( event . isCtrlPressed ( ) ) {
case KeyEvent . KEYCODE_T :
switch ( event . getKeyCode ( ) ) {
// Open new tab
case KeyEvent . KEYCODE_F :
newTab ( null , true ) ;
// Search in page
return true ;
findInPage ( ) ;
case KeyEvent . KEYCODE_W :
return true ;
// Close current tab
case KeyEvent . KEYCODE_T :
mPresenter . deleteTab ( mTabsManager . indexOfCurrentTab ( ) ) ;
// Open new tab
return true ;
newTab ( null , true ) ;
case KeyEvent . KEYCODE_Q :
return true ;
// Close browser
case KeyEvent . KEYCODE_W :
closeBrowser ( ) ;
// Close current tab
return true ;
mPresenter . deleteTab ( mTabsManager . indexOfCurrentTab ( ) ) ;
case KeyEvent . KEYCODE_R :
return true ;
// Refresh current tab
case KeyEvent . KEYCODE_Q :
LightningView currentTab = mTabsManager . getCurrentTab ( ) ;
// Close browser
if ( currentTab ! = null ) {
closeBrowser ( ) ;
currentTab . reload ( ) ;
return true ;
}
case KeyEvent . KEYCODE_R :
return true ;
// Refresh current tab
case KeyEvent . KEYCODE_TAB :
LightningView currentTab = mTabsManager . getCurrentTab ( ) ;
int nextIndex = 0 ;
if ( currentTab ! = null ) {
if ( event . isShiftPressed ( ) ) {
currentTab . reload ( ) ;
// Go back one tab
if ( mTabsManager . indexOfCurrentTab ( ) > 0 ) {
nextIndex = mTabsManager . indexOfCurrentTab ( ) - 1 ;
} else {
nextIndex = mTabsManager . last ( ) ;
}
}
} else {
return true ;
// Go forward one tab
case KeyEvent . KEYCODE_TAB :
if ( mTabsManager . indexOfCurrentTab ( ) < mTabsManager . last ( ) ) {
int nextIndex = 0 ;
nextIndex = mTabsManager . indexOfCurrentTab ( ) + 1 ;
if ( event . isShiftPressed ( ) ) {
// Go back one tab
if ( mTabsManager . indexOfCurrentTab ( ) > 0 ) {
nextIndex = mTabsManager . indexOfCurrentTab ( ) - 1 ;
} else {
nextIndex = mTabsManager . last ( ) ;
}
} else {
} else {
nextIndex = 0 ;
// Go forward one tab
if ( mTabsManager . indexOfCurrentTab ( ) < mTabsManager . last ( ) ) {
nextIndex = mTabsManager . indexOfCurrentTab ( ) + 1 ;
} else {
nextIndex = 0 ;
}
}
}
mPresenter . tabChanged ( nextIndex ) ;
return true ;
}
} else if ( event . getKeyCode ( ) = = KeyEvent . KEYCODE_SEARCH ) {
// Highlight search field
mSearch . requestFocus ( ) ;
mSearch . selectAll ( ) ;
return true ;
} else if ( event . isAltPressed ( ) ) {
// Alt + tab number
if ( KeyEvent . KEYCODE_0 < = event . getKeyCode ( ) & & event . getKeyCode ( ) < = KeyEvent . KEYCODE_9 ) {
int nextIndex ;
if ( event . getKeyCode ( ) > mTabsManager . last ( ) + KeyEvent . KEYCODE_1 | | event . getKeyCode ( ) = = KeyEvent . KEYCODE_0 ) {
nextIndex = mTabsManager . last ( ) ;
} else {
nextIndex = event . getKeyCode ( ) - KeyEvent . KEYCODE_1 ;
}
}
mPresenter . tabChanged ( nextIndex ) ;
mPresenter . tabChanged ( nextIndex ) ;
return true ;
return true ;
}
}
}
} else if ( event . getAction ( ) = = KeyEvent . ACTION_DOWN & & event . getKeyCode ( ) = = KeyEvent . KEYCODE_SEARCH ) {
// Highlight search field
mSearch . requestFocus ( ) ;
mSearch . selectAll ( ) ;
return true ;
}
}
return super . dispatchKeyEvent ( event ) ;
return super . dispatchKeyEvent ( event ) ;
}
}