- add sources.
[platform/framework/web/crosswalk.git] / src / remoting / android / java / src / org / chromium / chromoting / Desktop.java
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.chromoting;
6
7 import android.app.Activity;
8 import android.content.res.Configuration;
9 import android.os.Bundle;
10 import android.util.Log;
11 import android.view.KeyEvent;
12 import android.view.Menu;
13 import android.view.MenuItem;
14 import android.view.WindowManager;
15 import android.view.inputmethod.InputMethodManager;
16
17 import org.chromium.chromoting.jni.JniInterface;
18
19 /**
20  * A simple screen that does nothing except display a DesktopView and notify it of rotations.
21  */
22 public class Desktop extends Activity {
23     /** The surface that displays the remote host's desktop feed. */
24     private DesktopView remoteHostDesktop;
25
26     /** Called when the activity is first created. */
27     @Override
28     public void onCreate(Bundle savedInstanceState) {
29         super.onCreate(savedInstanceState);
30         remoteHostDesktop = new DesktopView(this);
31         setContentView(remoteHostDesktop);
32     }
33
34     /** Called when the activity is finally finished. */
35     @Override
36     public void onDestroy() {
37         super.onDestroy();
38         JniInterface.disconnectFromHost();
39     }
40
41     /** Called when the display is rotated (as registered in the manifest). */
42     @Override
43     public void onConfigurationChanged(Configuration newConfig) {
44         super.onConfigurationChanged(newConfig);
45         remoteHostDesktop.onScreenConfigurationChanged();
46     }
47
48     /** Called to initialize the action bar. */
49     @Override
50     public boolean onCreateOptionsMenu(Menu menu) {
51         getMenuInflater().inflate(R.menu.desktop_actionbar, menu);
52         return super.onCreateOptionsMenu(menu);
53     }
54
55     /** Called whenever an action bar button is pressed. */
56     @Override
57     public boolean onOptionsItemSelected(MenuItem item) {
58         switch (item.getItemId()) {
59             case R.id.actionbar_keyboard:
60                 ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).toggleSoftInput(0, 0);
61                 return true;
62             case R.id.actionbar_hide:
63                 getActionBar().hide();
64                 return true;
65             default:
66                 return super.onOptionsItemSelected(item);
67         }
68     }
69
70     /**
71      * Called once when a keyboard key is pressed, then again when that same key is released. This
72      * is not guaranteed to be notified of all soft keyboard events: certian keyboards might not
73      * call it at all, while others might skip it in certain situations (e.g. swipe input).
74      */
75     @Override
76     public boolean dispatchKeyEvent(KeyEvent event) {
77         boolean depressed = event.getAction() == KeyEvent.ACTION_DOWN;
78
79         switch (event.getKeyCode()) {
80             case KeyEvent.KEYCODE_AT:
81                 JniInterface.keyboardAction(KeyEvent.KEYCODE_SHIFT_LEFT, depressed);
82                 JniInterface.keyboardAction(KeyEvent.KEYCODE_2, depressed);
83                 break;
84             case KeyEvent.KEYCODE_POUND:
85                 JniInterface.keyboardAction(KeyEvent.KEYCODE_SHIFT_LEFT, depressed);
86                 JniInterface.keyboardAction(KeyEvent.KEYCODE_3, depressed);
87                 break;
88             case KeyEvent.KEYCODE_STAR:
89                 JniInterface.keyboardAction(KeyEvent.KEYCODE_SHIFT_LEFT, depressed);
90                 JniInterface.keyboardAction(KeyEvent.KEYCODE_8, depressed);
91                 break;
92             case KeyEvent.KEYCODE_PLUS:
93                 JniInterface.keyboardAction(KeyEvent.KEYCODE_SHIFT_LEFT, depressed);
94                 JniInterface.keyboardAction(KeyEvent.KEYCODE_EQUALS, depressed);
95                 break;
96             default:
97                 // We try to send all other key codes to the host directly.
98                 JniInterface.keyboardAction(event.getKeyCode(), depressed);
99         }
100
101         return super.dispatchKeyEvent(event);
102     }
103 }