I hereby claim:
- I am gouravd on github.
- I am gouravd (https://keybase.io/gouravd) on keybase.
- I have a public key ASCj0sKbTBnLUaeZ3CgA2qARKPL9ChE9Jj4DYQPSxPA2cwo
To claim this, I am signing this object:
I hereby claim:
To claim this, I am signing this object:
import com.google.inject.Singleton; | |
import java.util.regex.Matcher; | |
import java.util.regex.Pattern; | |
@Singleton | |
public class YouTubeHelper { | |
final String youTubeUrlRegEx = "^(https?)?(://)?(www.)?(m.)?((youtube.com)|(youtu.be))/"; | |
final String[] videoIdRegex = { "\\?vi?=([^&]*)","watch\\?.*v=([^&]*)", "(?:embed|vi?)/([^/?]*)", "^([A-Za-z0-9\\-]*)"}; |
import android.text.SpannableStringBuilder; | |
import android.text.Spanned; | |
import android.text.TextPaint; | |
import android.text.method.LinkMovementMethod; | |
import android.text.style.ClickableSpan; | |
import android.view.View; | |
import android.widget.TextView; | |
import java.util.ArrayList; | |
import java.util.regex.Matcher; |
import com.google.firebase.database.DataSnapshot; | |
import com.google.firebase.database.DatabaseError; | |
import com.google.firebase.database.DatabaseReference; | |
import com.google.firebase.database.Query; | |
import com.google.firebase.database.ValueEventListener; | |
import java.util.concurrent.CountDownLatch; | |
/** | |
* File Created by gouravd on 17/08/16. |
/* | |
* Copyright (c) 2012, AllSeen Alliance. All rights reserved. | |
* | |
* Permission to use, copy, modify, and/or distribute this software for any | |
* purpose with or without fee is hereby granted, provided that the above | |
* copyright notice and this permission notice appear in all copies. | |
* | |
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
protected void encodeWithMediaCodec(){ | |
... | |
mAudioRecord.startRecording(); | |
mMediaCodec.start(); | |
final MediaCodecInputStream inputStream = new MediaCodecInputStream(mMediaCodec); | |
if (mMuxer!=null) inputStream.setMuxer(mMuxer); | |
final ByteBuffer[] inputBuffers = mMediaCodec.getInputBuffers(); | |
} |
// assumes you add a timestamp field to each record (see Firebase.ServerValue.TIMESTAMP) | |
// pros: fast and done server-side (less bandwidth, faster response), simple | |
// cons: a few bytes on each record for the timestamp | |
var ref = new Firebase(...); | |
ref.orderByChild('timestamp').startAt(Date.now()).on('child_added', function(snapshot) { | |
console.log('new record', snap.key()); | |
}); |
You need to connect your device to your computer via USB cable. Make sure USB debugging is working. You can check if it shows up when running adb devices. | |
Run adb tcpip 5555 | |
Disconnect your device (remove the USB cable). | |
Go to the Settings -> About phone -> Status to view the IP address of your phone. | |
Run adb connect <IP address of your device>:5555 |
/** | |
* Custom Scroll listener for RecyclerView. | |
* Based on implementation https://gist.github.com/ssinss/e06f12ef66c51252563e | |
*/ | |
public abstract class EndlessRecyclerOnScrollListener extends RecyclerView.OnScrollListener { | |
public static String TAG = "EndlessScrollListener"; | |
private int previousTotal = 0; // The total number of items in the dataset after the last load | |
private boolean loading = true; // True if we are still waiting for the last set of data to load. | |
private int visibleThreshold = 5; // The minimum amount of items to have below your current scroll position before loading more. |
public static byte[] rotateYUV420Degree90(byte[] data, int imageWidth, int imageHeight) { | |
byte[] yuv = new byte[imageWidth * imageHeight * 3 / 2]; | |
// Rotate the Y luma | |
int i = 0; | |
for (int x = 0; x < imageWidth; x++) { | |
for (int y = imageHeight - 1; y >= 0; y--) { | |
yuv[i] = data[y * imageWidth + x]; | |
i++; | |
} | |
} |