Upstream version 11.39.244.0
[platform/framework/web/crosswalk.git] / src / xwalk / runtime / android / sample / src / org / xwalk / core / sample / OnCreateWindowRequestedActivity.java
1 // Copyright (c) 2014 Intel Corporation. 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.xwalk.core.sample;
6
7 import android.app.Activity;
8 import android.os.Bundle;
9 import android.view.KeyEvent;
10 import android.widget.LinearLayout;
11 import android.webkit.ValueCallback;
12
13 import java.util.LinkedList;
14
15 import org.xwalk.core.XWalkNavigationHistory;
16 import org.xwalk.core.XWalkUIClient;
17 import org.xwalk.core.XWalkView;
18
19 public class OnCreateWindowRequestedActivity extends XWalkBaseActivity {
20     private LinearLayout mParent;
21     private LinkedList<XWalkView> mXWalkViewHistory = new LinkedList<XWalkView>();
22
23     @Override
24     protected void onCreate(Bundle savedInstanceState) {
25         super.onCreate(savedInstanceState);
26
27         mParent = new LinearLayout(OnCreateWindowRequestedActivity.this);
28         setContentView(mParent);
29
30         mXWalkView = new XWalkView(OnCreateWindowRequestedActivity.this, 
31                 OnCreateWindowRequestedActivity.this);
32         setClient(mXWalkView);
33
34         mParent.addView(mXWalkView);
35         mXWalkViewHistory.add(mXWalkView);
36
37         mXWalkView.load("file:///android_asset/create_window_1.html", null);
38     }
39
40     private void setClient(XWalkView view) {
41         view.setUIClient(new XWalkUIClient(view) {
42             @Override
43             public boolean onCreateWindowRequested(XWalkView view, InitiateBy initiator,
44                     ValueCallback<XWalkView> callback) {
45                 XWalkView newView = new XWalkView(OnCreateWindowRequestedActivity.this, 
46                         OnCreateWindowRequestedActivity.this);
47                 setClient(newView);
48
49                 mParent.removeView(mXWalkViewHistory.getLast());
50                 mParent.addView(newView);
51                 mXWalkViewHistory.add(newView);
52
53                 callback.onReceiveValue(newView);
54                 return true;
55             }
56         });
57     }
58
59     @Override
60     public boolean onKeyDown(int keyCode, KeyEvent event) {
61         if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_BACK) {
62             if (mXWalkViewHistory.getLast().getNavigationHistory().canGoBack()) {
63                 mXWalkViewHistory.getLast().getNavigationHistory().navigate(
64                         XWalkNavigationHistory.Direction.BACKWARD, 1);
65                 return true;
66             } else if (mXWalkViewHistory.size() > 1) {
67                 mParent.removeView(mXWalkViewHistory.removeLast());
68                 mParent.addView(mXWalkViewHistory.getLast());
69                 return true;
70             }
71         }
72         return super.onKeyDown(keyCode, event);
73     }
74 }