Chromium Code Reviews| OLD | NEW |
|---|---|
| 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.chromoting.jni; | 5 package org.chromium.chromoting.jni; |
| 6 | 6 |
| 7 import android.app.Activity; | 7 import android.app.Activity; |
| 8 import android.app.AlertDialog; | 8 import android.app.AlertDialog; |
| 9 import android.content.Context; | 9 import android.content.Context; |
| 10 import android.content.DialogInterface; | 10 import android.content.DialogInterface; |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 179 prefs.getString(hostId + "_id", ""), prefs.getString(hostId + "_ secret", "")); | 179 prefs.getString(hostId + "_id", ""), prefs.getString(hostId + "_ secret", "")); |
| 180 sConnected = true; | 180 sConnected = true; |
| 181 } | 181 } |
| 182 | 182 |
| 183 /** Performs the native portion of the connection. */ | 183 /** Performs the native portion of the connection. */ |
| 184 private static native void nativeConnect(String username, String authToken, String hostJid, | 184 private static native void nativeConnect(String username, String authToken, String hostJid, |
| 185 String hostId, String hostPubkey, String pairId, String pairSecret); | 185 String hostId, String hostPubkey, String pairId, String pairSecret); |
| 186 | 186 |
| 187 /** Severs the connection and cleans up. Called on the UI thread. */ | 187 /** Severs the connection and cleans up. Called on the UI thread. */ |
| 188 public static void disconnectFromHost() { | 188 public static void disconnectFromHost() { |
| 189 if (!sConnected) return; | 189 if (!sConnected) return; |
|
Jamie
2014/07/30 17:22:04
Nit: Elsewhere in this file, you've got braces for
Lambros
2014/08/12 01:27:35
Done.
| |
| 190 | 190 |
| 191 sConnectionListener.onConnectionState(ConnectionListener.State.CLOSED, | 191 sConnectionListener.onConnectionState(ConnectionListener.State.CLOSED, |
| 192 ConnectionListener.Error.OK); | 192 ConnectionListener.Error.OK); |
| 193 | 193 |
| 194 disconnectFromHostWithoutNotification(); | |
| 195 } | |
| 196 | |
| 197 /** Same as disconnectFromHost() but without notifying the ConnectionListene r. */ | |
| 198 private static void disconnectFromHostWithoutNotification() { | |
| 199 if (!sConnected) return; | |
| 200 | |
| 194 nativeDisconnect(); | 201 nativeDisconnect(); |
| 195 sConnectionListener = null; | 202 sConnectionListener = null; |
| 196 sConnected = false; | 203 sConnected = false; |
| 197 | 204 |
| 198 // Drop the reference to free the Bitmap for GC. | 205 // Drop the reference to free the Bitmap for GC. |
| 199 synchronized (sFrameLock) { | 206 synchronized (sFrameLock) { |
| 200 sFrameBitmap = null; | 207 sFrameBitmap = null; |
| 201 } | 208 } |
| 202 } | 209 } |
| 203 | 210 |
| 204 /** Performs the native portion of the cleanup. */ | 211 /** Performs the native portion of the cleanup. */ |
| 205 private static native void nativeDisconnect(); | 212 private static native void nativeDisconnect(); |
| 206 | 213 |
| 207 /** Reports whenever the connection status changes. Called on the UI thread. */ | 214 /** Reports whenever the connection status changes. Called on the UI thread. */ |
| 208 @CalledByNative | 215 @CalledByNative |
| 209 private static void reportConnectionStatus(int state, int error) { | 216 private static void reportConnectionStatus(int stateCode, int errorCode) { |
| 210 sConnectionListener.onConnectionState(ConnectionListener.State.fromValue (state), | 217 ConnectionListener.State state = ConnectionListener.State.fromValue(stat eCode); |
| 211 ConnectionListener.Error.fromValue(error)); | 218 ConnectionListener.Error error = ConnectionListener.Error.fromValue(erro rCode); |
| 219 sConnectionListener.onConnectionState(state, error); | |
| 220 if (state == ConnectionListener.State.FAILED || state == ConnectionListe ner.State.CLOSED) { | |
| 221 // Disconnect from the host here, otherwise the next time connectToH ost() is called, | |
| 222 // it will try to disconnect, triggering an incorrect status notific ation. | |
| 223 disconnectFromHostWithoutNotification(); | |
|
Jamie
2014/07/30 17:22:04
I don't like the fact that a method called reportC
Lambros
2014/08/12 01:27:35
Renamed the method (this touches some C++ files as
| |
| 224 } | |
| 212 } | 225 } |
| 213 | 226 |
| 214 /** Prompts the user to enter a PIN. Called on the UI thread. */ | 227 /** Prompts the user to enter a PIN. Called on the UI thread. */ |
| 215 @CalledByNative | 228 @CalledByNative |
| 216 private static void displayAuthenticationPrompt(boolean pairingSupported) { | 229 private static void displayAuthenticationPrompt(boolean pairingSupported) { |
| 217 AlertDialog.Builder pinPrompt = new AlertDialog.Builder(sContext); | 230 AlertDialog.Builder pinPrompt = new AlertDialog.Builder(sContext); |
| 218 pinPrompt.setTitle(sContext.getString(R.string.title_authenticate)); | 231 pinPrompt.setTitle(sContext.getString(R.string.title_authenticate)); |
| 219 pinPrompt.setMessage(sContext.getString(R.string.pin_message_android)); | 232 pinPrompt.setMessage(sContext.getString(R.string.pin_message_android)); |
| 220 pinPrompt.setIcon(android.R.drawable.ic_lock_lock); | 233 pinPrompt.setIcon(android.R.drawable.ic_lock_lock); |
| 221 | 234 |
| 222 final View pinEntry = sContext.getLayoutInflater().inflate(R.layout.pin_ dialog, null); | 235 final View pinEntry = sContext.getLayoutInflater().inflate(R.layout.pin_ dialog, null); |
| 223 pinPrompt.setView(pinEntry); | 236 pinPrompt.setView(pinEntry); |
| 224 | 237 |
| 225 final TextView pinTextView = (TextView)pinEntry.findViewById(R.id.pin_di alog_text); | 238 final TextView pinTextView = (TextView)pinEntry.findViewById(R.id.pin_di alog_text); |
| 226 final CheckBox pinCheckBox = (CheckBox)pinEntry.findViewById(R.id.pin_di alog_check); | 239 final CheckBox pinCheckBox = (CheckBox)pinEntry.findViewById(R.id.pin_di alog_check); |
| 227 | 240 |
| 228 if (!pairingSupported) { | 241 if (!pairingSupported) { |
| 229 pinCheckBox.setChecked(false); | 242 pinCheckBox.setChecked(false); |
| 230 pinCheckBox.setVisibility(View.GONE); | 243 pinCheckBox.setVisibility(View.GONE); |
| 231 } | 244 } |
| 232 | 245 |
| 233 pinPrompt.setPositiveButton( | 246 pinPrompt.setPositiveButton( |
| 234 R.string.connect_button, new DialogInterface.OnClickListener() { | 247 R.string.connect_button, new DialogInterface.OnClickListener() { |
| 235 @Override | 248 @Override |
| 236 public void onClick(DialogInterface dialog, int which) { | 249 public void onClick(DialogInterface dialog, int which) { |
| 237 Log.i("jniiface", "User provided a PIN code"); | 250 Log.i("jniiface", "User provided a PIN code"); |
| 238 nativeAuthenticationResponse(String.valueOf(pinTextView. getText()), | 251 if (sConnected) { |
| 239 pinCheckBox.isChecked(), Build.MODEL); | 252 nativeAuthenticationResponse(String.valueOf(pinTextV iew.getText()), |
| 253 pinCheckBox.isChecked(), Build.MODEL); | |
| 254 } | |
|
Jamie
2014/07/30 17:22:04
I think we should show an error in this case. It w
Lambros
2014/08/12 01:27:35
Done.
| |
| 240 } | 255 } |
| 241 }); | 256 }); |
| 242 | 257 |
| 243 pinPrompt.setNegativeButton( | 258 pinPrompt.setNegativeButton( |
| 244 R.string.cancel, new DialogInterface.OnClickListener() { | 259 R.string.cancel, new DialogInterface.OnClickListener() { |
| 245 @Override | 260 @Override |
| 246 public void onClick(DialogInterface dialog, int which) { | 261 public void onClick(DialogInterface dialog, int which) { |
| 247 Log.i("jniiface", "User canceled pin entry prompt"); | 262 Log.i("jniiface", "User canceled pin entry prompt"); |
| 248 disconnectFromHost(); | 263 disconnectFromHost(); |
| 249 } | 264 } |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 450 /** Pops up a third party login page to fetch the token required for authent ication. */ | 465 /** Pops up a third party login page to fetch the token required for authent ication. */ |
| 451 @CalledByNative | 466 @CalledByNative |
| 452 public static void fetchThirdPartyToken(String tokenUrl, String clientId, St ring scope) { | 467 public static void fetchThirdPartyToken(String tokenUrl, String clientId, St ring scope) { |
| 453 Chromoting app = (Chromoting) sContext; | 468 Chromoting app = (Chromoting) sContext; |
| 454 app.fetchThirdPartyToken(tokenUrl, clientId, scope); | 469 app.fetchThirdPartyToken(tokenUrl, clientId, scope); |
| 455 } | 470 } |
| 456 | 471 |
| 457 /** | 472 /** |
| 458 * Notify the native code to continue authentication with the |token| and th e |sharedSecret|. | 473 * Notify the native code to continue authentication with the |token| and th e |sharedSecret|. |
| 459 */ | 474 */ |
| 460 public static native void nativeOnThirdPartyTokenFetched(String token, Strin g sharedSecret); | 475 public static void onThirdPartyTokenFetched(String token, String sharedSecre t) { |
| 476 if (!sConnected) { | |
| 477 return; | |
| 478 } | |
| 479 | |
| 480 nativeOnThirdPartyTokenFetched(token, sharedSecret); | |
| 481 } | |
| 482 | |
| 483 /** Passes authentication data to the native handling code. */ | |
| 484 private static native void nativeOnThirdPartyTokenFetched(String token, Stri ng sharedSecret); | |
| 461 } | 485 } |
| OLD | NEW |