Created
November 22, 2018 19:10
-
-
Save Kolyall/be1ad783d356484aff75b6f1d20be8e1 to your computer and use it in GitHub Desktop.
PDFTools
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
public class PDFTools { | |
private static final String GOOGLE_DRIVE_PDF_READER_PREFIX = "http://drive.google.com/viewer?url="; | |
private static final String PDF_MIME_TYPE = "application/pdf"; | |
private static final String HTML_MIME_TYPE = "text/html"; | |
public static void showPDFUrl( final Context context, final String pdfUrl ) { | |
if ( isPDFSupported( context ) ) { | |
downloadAndOpenPDF(context, pdfUrl); | |
} else { | |
askToOpenPDFThroughGoogleDrive( context, pdfUrl ); | |
} | |
} | |
@TargetApi(Build.VERSION_CODES.GINGERBREAD) | |
public static void downloadAndOpenPDF(final Context context, final String pdfUrl) { | |
// Get filename | |
final String filename = pdfUrl.substring( pdfUrl.lastIndexOf( "/" ) + 1 ); | |
// The place where the downloaded PDF file will be put | |
final File tempFile = new File( context.getExternalFilesDir( Environment.DIRECTORY_DOWNLOADS ), filename ); | |
if ( tempFile.exists() ) { | |
// If we have downloaded the file before, just go ahead and show it. | |
openPDF( context, Uri.fromFile( tempFile ) ); | |
return; | |
} | |
// Show progress dialog while downloading | |
final ProgressDialog progress = ProgressDialog.show( context, context.getString( R.string.pdf_show_local_progress_title ), context.getString( R.string.pdf_show_local_progress_content ), true ); | |
// Create the download request | |
DownloadManager.Request r = new DownloadManager.Request( Uri.parse( pdfUrl ) ); | |
r.setDestinationInExternalFilesDir( context, Environment.DIRECTORY_DOWNLOADS, filename ); | |
final DownloadManager dm = (DownloadManager) context.getSystemService( Context.DOWNLOAD_SERVICE ); | |
BroadcastReceiver onComplete = new BroadcastReceiver() { | |
@Override | |
public void onReceive(Context context, Intent intent) { | |
if ( !progress.isShowing() ) { | |
return; | |
} | |
context.unregisterReceiver( this ); | |
progress.dismiss(); | |
long downloadId = intent.getLongExtra( DownloadManager.EXTRA_DOWNLOAD_ID, -1 ); | |
Cursor c = dm.query( new DownloadManager.Query().setFilterById( downloadId ) ); | |
if ( c.moveToFirst() ) { | |
int status = c.getInt( c.getColumnIndex( DownloadManager.COLUMN_STATUS ) ); | |
if ( status == DownloadManager.STATUS_SUCCESSFUL ) { | |
openPDF( context, Uri.fromFile( tempFile ) ); | |
} | |
} | |
c.close(); | |
} | |
}; | |
context.registerReceiver( onComplete, new IntentFilter( DownloadManager.ACTION_DOWNLOAD_COMPLETE ) ); | |
// Enqueue the request | |
dm.enqueue( r ); | |
} | |
public static void askToOpenPDFThroughGoogleDrive( final Context context, final String pdfUrl ) { | |
new AlertDialog.Builder( context ) | |
.setTitle( R.string.pdf_show_online_dialog_title ) | |
.setMessage( R.string.pdf_show_online_dialog_question ) | |
.setNegativeButton( R.string.pdf_show_online_dialog_button_no, null ) | |
.setPositiveButton( R.string.pdf_show_online_dialog_button_yes, new OnClickListener() { | |
@Override | |
public void onClick(DialogInterface dialog, int which) { | |
openPDFThroughGoogleDrive(context, pdfUrl); | |
} | |
}) | |
.show(); | |
} | |
public static void openPDFThroughGoogleDrive(final Context context, final String pdfUrl) { | |
Intent i = new Intent( Intent.ACTION_VIEW ); | |
i.setDataAndType(Uri.parse(GOOGLE_DRIVE_PDF_READER_PREFIX + pdfUrl ), HTML_MIME_TYPE ); | |
context.startActivity( i ); | |
} | |
public static final void openPDF(Context context, Uri localUri ) { | |
Intent i = new Intent( Intent.ACTION_VIEW ); | |
i.setDataAndType( localUri, PDF_MIME_TYPE ); | |
context.startActivity( i ); | |
} | |
public static boolean isPDFSupported( Context context ) { | |
Intent i = new Intent( Intent.ACTION_VIEW ); | |
final File tempFile = new File( context.getExternalFilesDir( Environment.DIRECTORY_DOWNLOADS ), "test.pdf" ); | |
i.setDataAndType( Uri.fromFile( tempFile ), PDF_MIME_TYPE ); | |
return context.getPackageManager().queryIntentActivities( i, PackageManager.MATCH_DEFAULT_ONLY ).size() > 0; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment