Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(751)

Side by Side Diff: shell/android/apk/src/org/chromium/mojo/shell/MojoShellActivity.java

Issue 1280613003: Allow native_viewport to create new native windows on demand on Android. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.mojo.shell; 5 package org.chromium.mojo.shell;
6 6
7 import android.app.Activity; 7 import android.app.Activity;
8 import android.app.UiModeManager;
9 import android.content.Context; 8 import android.content.Context;
10 import android.content.Intent; 9 import android.content.Intent;
11 import android.content.ServiceConnection; 10 import android.content.ServiceConnection;
12 import android.content.res.Configuration;
13 import android.net.Uri; 11 import android.net.Uri;
14 import android.os.Bundle; 12 import android.os.Bundle;
15 import android.view.WindowManager;
16 13
17 import java.util.ArrayDeque; 14 import java.util.ArrayDeque;
18 15
19 /** 16 /**
20 * Activity for managing the Mojo Shell. 17 * Entry point for the Mojo Shell application.
21 */ 18 */
22 public class MojoShellActivity extends Activity implements ShellService.IShellBi ndingActivity { 19 public class MojoShellActivity extends Activity implements ShellService.IShellBi ndingActivity {
23 private static final String TAG = "MojoShellActivity"; 20 private static final String TAG = "MojoShellActivity";
24 private ArrayDeque<Intent> mPendingIntents = new ArrayDeque<Intent>(); 21 private ArrayDeque<Intent> mPendingIntents = new ArrayDeque<Intent>();
25 private ShellService mShellService; 22 private ShellService mShellService;
26 private ServiceConnection mShellServiceConnection; 23 private ServiceConnection mShellServiceConnection;
27 24
28 @Override 25 @Override
29 protected void onCreate(final Bundle savedInstanceState) { 26 protected void onCreate(final Bundle savedInstanceState) {
30 super.onCreate(savedInstanceState); 27 super.onCreate(savedInstanceState);
31 28
32 Intent serviceIntent = new Intent(this, ShellService.class); 29 Intent serviceIntent = new Intent(this, ShellService.class);
33 // Copy potential startup arguments. 30 // Copy potential startup arguments.
34 serviceIntent.putExtras(getIntent()); 31 serviceIntent.putExtras(getIntent());
35 startService(serviceIntent); 32 startService(serviceIntent);
36 bindShellService(serviceIntent); 33
34 mShellServiceConnection = new ShellService.ShellServiceConnection(this);
35 bindService(serviceIntent, mShellServiceConnection, Context.BIND_AUTO_CR EATE);
37 36
38 onNewIntent(getIntent()); 37 onNewIntent(getIntent());
39
40 // TODO(tonyg): Watch activities go back to the home screen within a
41 // couple of seconds of detaching from adb. So for demonstration purpose s,
42 // we just keep the screen on. Eventually we'll want a solution for
43 // allowing the screen to sleep without quitting the shell.
44 // TODO(etiennej): Verify the above is still true after the switch to a Service model.
45 UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_S ERVICE);
46 if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_WAT CH) {
47 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) ;
48 }
49 }
50
51 private void bindShellService(Intent serviceIntent) {
52 if (mShellServiceConnection == null) {
53 mShellServiceConnection = new ShellService.ShellServiceConnection(th is);
54 bindService(serviceIntent, mShellServiceConnection, Context.BIND_AUT O_CREATE);
55 }
56 }
57
58 private void unbindShellService() {
59 if (mShellServiceConnection != null) {
60 unbindService(mShellServiceConnection);
61 mShellServiceConnection = null;
62 }
63 } 38 }
64 39
65 @Override 40 @Override
66 protected void onRestart() {
67 super.onRestart();
68 bindShellService(new Intent(this, ShellService.class));
69 }
70
71 @Override
72 protected void onStop() {
73 super.onStop();
74 unbindShellService();
75 }
76
77 @Override
78 protected void onNewIntent(Intent intent) { 41 protected void onNewIntent(Intent intent) {
79 super.onNewIntent(intent); 42 super.onNewIntent(intent);
80 setIntent(intent); 43 setIntent(intent);
81 mPendingIntents.add(intent); 44 mPendingIntents.add(intent);
82
83 if (mShellService != null) {
84 communicateWithShell();
85 }
86 } 45 }
87 46
88 @Override 47 @Override
89 public void onShellBound(ShellService shellService) { 48 public void onShellBound(ShellService shellService) {
90 mShellService = shellService; 49 mShellService = shellService;
50 finish();
91 communicateWithShell(); 51 communicateWithShell();
52 unbindService(mShellServiceConnection);
92 } 53 }
93 54
94 @Override 55 @Override
95 public void onShellUnbound() { 56 public void onShellUnbound() {
96 mShellService = null; 57 mShellService = null;
58 mShellServiceConnection = null;
97 } 59 }
98 60
99 /** 61 /**
100 * Communicate with the shell to start new apps, based on pending intents. 62 * Communicate with the shell to start new apps, based on pending intents.
101 */ 63 */
102 private void communicateWithShell() { 64 private void communicateWithShell() {
103 while (!mPendingIntents.isEmpty()) { 65 while (!mPendingIntents.isEmpty()) {
104 Intent intent = mPendingIntents.remove(); 66 Intent intent = mPendingIntents.remove();
105 Uri data = intent.getData(); 67 Uri data = intent.getData();
106 if (data != null) { 68 if (data != null) {
107 String url = data.buildUpon().scheme("https").build().toString() ; 69 String url = data.buildUpon().scheme("https").build().toString() ;
108 mShellService.startApplicationURL(url); 70 mShellService.startApplicationURL(url);
109 } 71 }
110 } 72 }
111 } 73 }
112 74
113 /** 75 /**
114 * @see Activity#onActivityResult(int, int, Intent) 76 * @see Activity#onActivityResult(int, int, Intent)
115 */ 77 */
116 @Override 78 @Override
117 protected void onActivityResult(int requestCode, int resultCode, Intent data ) { 79 protected void onActivityResult(int requestCode, int resultCode, Intent data ) {
118 IntentReceiverRegistry.getInstance().onActivityResult(requestCode, resul tCode, data); 80 IntentReceiverRegistry.getInstance().onActivityResult(requestCode, resul tCode, data);
119 } 81 }
120 } 82 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698