Skip to content

Instantly share code, notes, and snippets.

@f2prateek
f2prateek / ActivitySubscriptionManager.java
Last active October 23, 2017 14:30
Managing Subscriptions in Android with RxJava
/*
* Copyright 2014 Prateek Srivastava
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
@f2prateek
f2prateek / HttpRequestAdapter.java
Created June 4, 2014 05:44
Signing Requests with Retrofit and SignPost
package com.f2prateek.five00px.data.api.auth;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import oauth.signpost.http.HttpRequest;
import retrofit.client.Header;
import retrofit.client.Request;
// This is an aar, we'll ignore resources, and extract clases.jar
def outputDirName = "${buildDir}\\unpacked\\dist\\extracted"
System.out.println('Start')
print(file(outputDirName).list())
def extract = project.tasks.create "jarExtract${it.name.capitalize()}", Copy
extract.from it
extract.into outputDirName
extract.execute()
@f2prateek
f2prateek / Converter.java
Last active August 29, 2015 14:05
A mini gson implementation.
import java.io.InputStream;
import java.io.OutputStream;
public interface Converter {
public <T> T fromJson(InputStream in, Class<T> clazz) throws ConversionException;
public <T> void toJson(OutputStream os, T object) throws ConversionException;
public class ConversionException extends Exception {
public ConversionException(Throwable throwable) {
@f2prateek
f2prateek / Readme.md
Last active August 29, 2015 14:06
A Queue implementation for Tape.

A java.util.Queue implementation for Tape (does not support iteration).

Swapping implementations is easy!

@Module
class ProductionModule {
  @Provides @Named("payloads") Queue<Payload> providePayloadQueue(File queueFile, Converter<Payload> payloadConverter) {
    return new Tape<Payload>(queueFile, payloadConverter);
 }
@f2prateek
f2prateek / AndroidCI.md
Last active August 29, 2015 14:13 — forked from JvmName/Android CI

#Android and CI and Gradle (A How-To)

There are tech stacks in this world that make it dead simple to integrate a CI build system.
The Android platform is not one of them.

Although Gradle is getting better, it's still a bit non-deterministic, and some of the fixes you'll need will start to feel more like black magic than any sort of programming.

But fear not! It can be done!

Before we embark on our journey, you'll need a few things to run locally:

@f2prateek
f2prateek / zip.java
Created January 20, 2015 09:18
Read classes in a Zipfile
try {
ZipFile zipFile = new ZipFile(jarFile);
for (Enumeration<? extends ZipEntry> entries = zipFile.entries();
entries.hasMoreElements(); ) {
String name = entries.nextElement().getName();
System.out.println("entry: " + name);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
@f2prateek
f2prateek / dex.java
Created January 20, 2015 09:19
Print all classes in a DexFile
try {
File dexFileOutputDir = context.getDir("dexFileOutput" + fileKey, Context.MODE_PRIVATE);
File dexFileOutputFile = new File(dexFileOutputDir, "dex");
DexFile dx =
DexFile.loadDex(jarFile.getAbsolutePath(), dexFileOutputFile.getAbsolutePath(), 0);
// Print all classes in the DexFile
for (Enumeration<String> classNames = dx.entries(); classNames.hasMoreElements(); ) {
String className = classNames.nextElement();
System.out.println("class: " + className);
}
@f2prateek
f2prateek / check.go
Created September 27, 2015 08:16
Script that checks which component dependencies need to be updated.
package main
import (
"encoding/json"
"fmt"
"log"
"os"
"strings"
"sync"
package com.f2prateek.rx.preferences;
import android.content.SharedPreferences;
import android.support.annotation.Nullable;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;