Skip to content

Instantly share code, notes, and snippets.

@amanjeetsingh150
amanjeetsingh150 / ScreenshotReporter.kt
Last active April 21, 2022 13:42
Dumping screenshots via dadb
fun pullScreenshots(): File {
val screenshotPath = "/data/local/tmp/screenshots/<file_name_here>.png"
// 1
dadb.shell("screencap -p $screenshotPath")
// 2
val outputFile = File.createTempFile(outputFileName, ".txt")
val bufferedSink = outputFile.sink().buffer()
dadb.pull(bufferedSink, logFilePath)
return outputFile
}
@amanjeetsingh150
amanjeetsingh150 / LogsDump.kt
Last active April 21, 2022 13:40
Dumping logs via dadb
fun pullLogs(): File {
val logFilePath = "/data/local/tmp/logs/<file_name_here>.txt"
// 1
dadb.shell("logcat -v time -f $logFilePath -d")
// 2
val outputFile = File.createTempFile(outputFileName, ".txt")
val bufferedSink = outputFile.sink().buffer()
dadb.pull(bufferedSink, logFilePath)
return outputFile
}
@amanjeetsingh150
amanjeetsingh150 / LogcatReporter.kt
Last active April 4, 2022 07:36
Dumping logcat via dadb
import dadb.AdbShellResponse
import dadb.Dadb
import okio.Sink
import okio.buffer
import okio.sink
import java.io.File
import java.io.IOException
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
@amanjeetsingh150
amanjeetsingh150 / DataManger.kt
Last active June 18, 2019 16:11
Zipping analogy with Coroutines
private val zipDataChannel = Channel<List<FeedItem>>(2)
// Async coroutine builder for latest movies
fun loadLatestMoviesAsync() =
scope.async(coroutinesDispatcherProvider.io) {
moviesRepository.getLatestMovies()?.let {
zipDataChannel.send(it)
}
}
// Async coroutine for popular movies
this.providesRetrofitProvider =
DoubleCheck.provider(NetModule_ProvidesRetrofitFactory.create(builder.netModule));
public final class ActivityModule_ProvideMainViewModelFactory implements Factory<MainViewModel> {
/*Other code*/
@Override
public MainViewModel get() {
return Preconditions.checkNotNull(
module.provideMainViewModel(dataManagerProvider.get()),
"Cannot return null from a non-@Nullable @Provides method");
}
}
public final class DaggerActivityComponent implements ActivityComponent{
/**Other code**/
@Override
public void inject(MainActivity mainActivity) {
mainActivityMembersInjector.injectMembers(mainActivity);
}
}
private void initialize(final Builder builder) {
/**Other Code**/
this.provideMainViewModelProvider = ActivityModule_ProvideMainViewModelFactory.create(
builder.activityModule, dataManagerProvider);
this.mainActivityMembersInjector = MainActivity_MembersInjector
.create(provideMainViewModelProvider);
}
public static final class Builder {
/**Other code**/
public ActivityComponent build() {
if (activityModule == null) {
throw new IllegalStateException(ActivityModule.class.getCanonicalName() + " must be set");
}
if (appComponent == null) {
throw new IllegalStateException(AppComponent.class.getCanonicalName() + " must be set");
}
return new DaggerActivityComponent(this);
val activityComponent = DaggerActivityComponent
.builder()
.appComponent(InitApp.get(this).component())
.activityModule(ActivityModule(SchedulerProvider()))
.build()
activityComponent.inject(this)