Created
January 2, 2016 04:07
-
-
Save jaredsburrows/d2207ae7247b36fc1924 to your computer and use it in GitHub Desktop.
Google Feedbacl Utilities
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Copyright 2014 The Chromium Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
package org.chromium.chromoting; | |
import android.app.Activity; | |
import android.content.ComponentName; | |
import android.content.Intent; | |
import android.content.ServiceConnection; | |
import android.content.pm.PackageInfo; | |
import android.content.pm.PackageManager; | |
import android.graphics.Bitmap; | |
import android.net.Uri; | |
import android.os.Binder; | |
import android.os.Bundle; | |
import android.os.IBinder; | |
import android.os.Parcel; | |
import android.os.RemoteException; | |
import android.text.TextUtils; | |
import android.util.Log; | |
import android.view.Menu; | |
import android.view.MenuItem; | |
import android.view.View; | |
import android.webkit.WebView; | |
import android.webkit.WebViewClient; | |
import org.chromium.ui.UiUtils; | |
/** | |
* The Activity for showing the Help screen. | |
*/ | |
public class HelpActivity extends Activity { | |
private static final String PLAY_STORE_URL = "market://details?id="; | |
private static final String FEEDBACK_PACKAGE = "com.google.android.gms"; | |
private static final String FEEDBACK_CLASS = | |
"com.google.android.gms.feedback.LegacyBugReportService"; | |
/** | |
* Maximum dimension for the screenshot to be sent to the Send Feedback handler. This size | |
* ensures the size of bitmap < 1MB, which is a requirement of the handler. | |
*/ | |
private static final int MAX_FEEDBACK_SCREENSHOT_DIMENSION = 600; | |
/** | |
* This global variable is used for passing the screenshot from the originating Activity to the | |
* HelpActivity. There seems to be no better way of doing this. | |
*/ | |
private static Bitmap sScreenshot; | |
/** Constant used to send the feedback parcel to the system feedback service. */ | |
private static final int SEND_FEEDBACK_INFO = Binder.FIRST_CALL_TRANSACTION; | |
/** Launches an external web browser or application. */ | |
private void openUrl(String url) { | |
Uri uri = Uri.parse(url); | |
Intent intent = new Intent(Intent.ACTION_VIEW, uri); | |
// Verify that the device can launch an application for this intent, otherwise | |
// startActivity() may crash the application. | |
if (intent.resolveActivity(getPackageManager()) != null) { | |
startActivity(intent); | |
} | |
} | |
private void sendFeedback() { | |
Intent intent = new Intent(Intent.ACTION_BUG_REPORT); | |
intent.setComponent(new ComponentName(FEEDBACK_PACKAGE, FEEDBACK_CLASS)); | |
if (getPackageManager().resolveService(intent, 0) == null) { | |
Log.e("help", "Unable to resolve Feedback service."); | |
return; | |
} | |
ServiceConnection conn = new ServiceConnection() { | |
@Override | |
public void onServiceConnected(ComponentName name, IBinder service) { | |
try { | |
Parcel parcel = Parcel.obtain(); | |
if (sScreenshot != null) { | |
sScreenshot.writeToParcel(parcel, 0); | |
} | |
service.transact(SEND_FEEDBACK_INFO, parcel, null, 0); | |
parcel.recycle(); | |
} catch (RemoteException ex) { | |
Log.e("help", "Unexpected error sending feedback: ", ex); | |
} | |
} | |
@Override | |
public void onServiceDisconnected(ComponentName name) {} | |
}; | |
bindService(intent, conn, BIND_AUTO_CREATE); | |
} | |
/** Launches the Help activity. */ | |
public static void launch(Activity activity, String helpUrl) { | |
View rootView = activity.getWindow().getDecorView().getRootView(); | |
sScreenshot = UiUtils.generateScaledScreenshot(rootView, MAX_FEEDBACK_SCREENSHOT_DIMENSION, | |
Bitmap.Config.ARGB_8888); | |
Intent intent = new Intent(activity, HelpActivity.class); | |
intent.setData(Uri.parse(helpUrl)); | |
activity.startActivity(intent); | |
} | |
@Override | |
public void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
WebView webView = new WebView(this); | |
setContentView(webView); | |
getActionBar().setTitle(getString(R.string.actionbar_help_title)); | |
CharSequence appName = getTitle(); | |
CharSequence versionName = null; | |
try { | |
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), 0); | |
versionName = info.versionName; | |
} catch (PackageManager.NameNotFoundException ex) { | |
throw new RuntimeException("Unable to get version: " + ex); | |
} | |
CharSequence subtitle = TextUtils.concat(appName, " ", versionName); | |
getActionBar().setSubtitle(subtitle); | |
// This line ensures the WebView remains embedded in this activity and doesn't launch an | |
// external Chrome browser. | |
webView.setWebViewClient(new WebViewClient()); | |
webView.getSettings().setJavaScriptEnabled(true); | |
String url = getIntent().getDataString(); | |
webView.loadUrl(url); | |
} | |
@Override | |
public boolean onCreateOptionsMenu(Menu menu) { | |
getMenuInflater().inflate(R.menu.help_actionbar, menu); | |
return super.onCreateOptionsMenu(menu); | |
} | |
@Override | |
public boolean onOptionsItemSelected(MenuItem item) { | |
int id = item.getItemId(); | |
if (id == R.id.actionbar_feedback) { | |
sendFeedback(); | |
return true; | |
} | |
if (id == R.id.actionbar_play_store) { | |
openUrl(PLAY_STORE_URL + getPackageName()); | |
return true; | |
} | |
return super.onOptionsItemSelected(item); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
https://chromium.googlesource.com/chromium/src.git/+/39.0.2164.0/remoting/android/java/src/org/chromium/chromoting/HelpActivity.java