Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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; | 5 package org.chromium.chromoting; |
| 6 | 6 |
| 7 import android.app.Activity; | 7 import android.app.Activity; |
| 8 import android.content.ComponentName; | |
| 8 import android.content.Intent; | 9 import android.content.Intent; |
| 10 import android.content.ServiceConnection; | |
| 9 import android.content.pm.PackageInfo; | 11 import android.content.pm.PackageInfo; |
| 10 import android.content.pm.PackageManager; | 12 import android.content.pm.PackageManager; |
| 13 import android.graphics.Bitmap; | |
| 11 import android.net.Uri; | 14 import android.net.Uri; |
| 15 import android.os.Binder; | |
| 12 import android.os.Bundle; | 16 import android.os.Bundle; |
| 17 import android.os.IBinder; | |
| 18 import android.os.Parcel; | |
| 19 import android.os.RemoteException; | |
| 13 import android.text.TextUtils; | 20 import android.text.TextUtils; |
| 21 import android.util.Log; | |
| 14 import android.view.Menu; | 22 import android.view.Menu; |
| 15 import android.view.MenuItem; | 23 import android.view.MenuItem; |
| 24 import android.view.View; | |
| 16 import android.webkit.WebView; | 25 import android.webkit.WebView; |
| 17 import android.webkit.WebViewClient; | 26 import android.webkit.WebViewClient; |
| 18 | 27 |
| 28 import org.chromium.ui.UiUtils; | |
| 29 | |
| 19 /** | 30 /** |
| 20 * The Activity for showing the Help screen. | 31 * The Activity for showing the Help screen. |
| 21 */ | 32 */ |
| 22 public class HelpActivity extends Activity { | 33 public class HelpActivity extends Activity { |
| 23 private static final String PLAY_STORE_URL = "market://details?id="; | 34 private static final String PLAY_STORE_URL = "market://details?id="; |
| 24 | 35 |
| 36 /** | |
| 37 * Maximum dimension for the screenshot to be sent to the Send Feedback hand ler. This size | |
| 38 * ensures the size of bitmap < 1MB, which is a requirement of the handler. | |
| 39 */ | |
| 40 private static final int MAX_FEEDBACK_SCREENSHOT_DIMENSION = 600; | |
|
Jamie
2014/03/06 01:52:01
Is this assuming a square screenshot?
Lambros
2014/03/06 02:31:31
I don't know :) Chrome uses this same value.
| |
| 41 | |
| 42 private static Bitmap mScreenshot; | |
|
Lambros
2014/03/06 00:38:30
Global variables are evil, but there doesn't seem
Jamie
2014/03/06 01:52:01
I think this warrants a comment on the member itse
Lambros
2014/03/06 02:31:31
Done.
| |
| 43 | |
| 25 /** Launches an external web browser or application. */ | 44 /** Launches an external web browser or application. */ |
| 26 private void openUrl(String url) { | 45 private void openUrl(String url) { |
| 27 Uri uri = Uri.parse(url); | 46 Uri uri = Uri.parse(url); |
| 28 Intent intent = new Intent(Intent.ACTION_VIEW, uri); | 47 Intent intent = new Intent(Intent.ACTION_VIEW, uri); |
| 29 | 48 |
| 30 // Verify that the device can launch an application for this intent, oth erwise | 49 // Verify that the device can launch an application for this intent, oth erwise |
| 31 // startActivity() may crash the application. | 50 // startActivity() may crash the application. |
| 32 if (intent.resolveActivity(getPackageManager()) != null) { | 51 if (intent.resolveActivity(getPackageManager()) != null) { |
| 33 startActivity(intent); | 52 startActivity(intent); |
| 34 } | 53 } |
| 35 } | 54 } |
| 36 | 55 |
| 56 private void sendFeedback() { | |
| 57 Intent intent = new Intent(Intent.ACTION_BUG_REPORT); | |
| 58 ServiceConnection conn = new ServiceConnection() { | |
| 59 @Override | |
| 60 public void onServiceConnected(ComponentName name, IBinder service) { | |
| 61 try { | |
| 62 Parcel parcel = Parcel.obtain(); | |
| 63 if (mScreenshot != null) { | |
| 64 mScreenshot.writeToParcel(parcel, 0); | |
| 65 } | |
| 66 service.transact(Binder.FIRST_CALL_TRANSACTION, parcel, null , 0); | |
|
Jamie
2014/03/06 01:52:01
I had to look up FIRST_CALL_TRANSATION. As far as
Lambros
2014/03/06 02:31:31
Done, though I'm not sure I've thought of a good n
| |
| 67 parcel.recycle(); | |
| 68 } catch (RemoteException ex) { | |
| 69 Log.d("help", "Unexpected error sending feedback: ", ex); | |
|
Jamie
2014/03/06 01:52:01
Should this be Log.e?
Lambros
2014/03/06 02:31:31
Done.
| |
| 70 } | |
| 71 } | |
| 72 | |
| 73 @Override | |
| 74 public void onServiceDisconnected(ComponentName name) {} | |
| 75 }; | |
| 76 | |
| 77 bindService(intent, conn, BIND_AUTO_CREATE); | |
| 78 } | |
| 79 | |
| 80 /** Launches the Help activity. */ | |
| 81 public static void launch(Activity activity, String helpUrl) { | |
| 82 View rootView = activity.getWindow().getDecorView().getRootView(); | |
| 83 mScreenshot = UiUtils.generateScaledScreenshot(rootView, MAX_FEEDBACK_SC REENSHOT_DIMENSION, | |
| 84 Bitmap.Config.ARGB_8888); | |
| 85 | |
| 86 Intent intent = new Intent(activity, HelpActivity.class); | |
| 87 intent.setData(Uri.parse(helpUrl)); | |
| 88 activity.startActivity(intent); | |
| 89 } | |
| 90 | |
| 37 @Override | 91 @Override |
| 38 public void onCreate(Bundle savedInstanceState) { | 92 public void onCreate(Bundle savedInstanceState) { |
| 39 super.onCreate(savedInstanceState); | 93 super.onCreate(savedInstanceState); |
| 40 | 94 |
| 41 WebView webView = new WebView(this); | 95 WebView webView = new WebView(this); |
| 42 setContentView(webView); | 96 setContentView(webView); |
| 43 | 97 |
| 44 getActionBar().setTitle(getString(R.string.actionbar_help_title)); | 98 getActionBar().setTitle(getString(R.string.actionbar_help_title)); |
| 45 | 99 |
| 46 CharSequence appName = getTitle(); | 100 CharSequence appName = getTitle(); |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 65 | 119 |
| 66 @Override | 120 @Override |
| 67 public boolean onCreateOptionsMenu(Menu menu) { | 121 public boolean onCreateOptionsMenu(Menu menu) { |
| 68 getMenuInflater().inflate(R.menu.help_actionbar, menu); | 122 getMenuInflater().inflate(R.menu.help_actionbar, menu); |
| 69 return super.onCreateOptionsMenu(menu); | 123 return super.onCreateOptionsMenu(menu); |
| 70 } | 124 } |
| 71 | 125 |
| 72 @Override | 126 @Override |
| 73 public boolean onOptionsItemSelected(MenuItem item) { | 127 public boolean onOptionsItemSelected(MenuItem item) { |
| 74 switch (item.getItemId()) { | 128 switch (item.getItemId()) { |
| 129 case R.id.actionbar_feedback: | |
| 130 sendFeedback(); | |
| 131 return true; | |
| 132 | |
| 75 case R.id.actionbar_play_store: | 133 case R.id.actionbar_play_store: |
| 76 openUrl(PLAY_STORE_URL + getPackageName()); | 134 openUrl(PLAY_STORE_URL + getPackageName()); |
| 77 return true; | 135 return true; |
| 78 | 136 |
| 79 default: | 137 default: |
| 80 return super.onOptionsItemSelected(item); | 138 return super.onOptionsItemSelected(item); |
| 81 } | 139 } |
| 82 } | 140 } |
| 83 } | 141 } |
| OLD | NEW |