SkillAgentSearch skills...

DebugDrawer

Android Debug Drawer for faster development

Install / Use

/learn @palaima/DebugDrawer
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Android Debug Drawer

Android Arsenal

Faster development with Debug Drawer

Features

DeviceModule - common information about your device

BuildModule - app build information

SettingsModule - open Developer, Battery, Default settings, open app info and possibility to uninstall app directly from itself

NetworkModule - enable/disable Wifi, Mobile or Bluetooth

OkHttpModule,OkHttp3Module - common information about http client (requires extra dependency)

PicassoModule - image downloading and caching statistics (requires extra dependency)

GlideModule - image downloading and caching statistics (requires extra dependency)

ScalpelModule - tool to uncover the layers under your app (requires extra dependency). Thanks ebabel for contributing.

LocationModule - common location information (requires extra dependency)

TimberModule - log viewer with sharing feature (requires extra dependency). Thanks AntonyGolovin for contributing.

ActionsModule - any context dependent action (ButtonAction, SwitchAction, SpinnerAction)

FpsModule - measuring the FPS using Choreographer (requires extra dependency)

LogsModule - Logcat and OkHttp network calls interceptor (requires extra dependency). Credits Sloy

NetworkQualityModule - Error/delay rate managing for network calls (requires extra dependency). Credits Sloy

TODO

  • Take screenshot feature

You are always welcome to suggest modules!

Getting Started

Add Gradle dependencies:

DebugDrawer

dependencies {
   debugImplementation 'io.palaima.debugdrawer:debugdrawer:0.8.0'
   releaseImplementation 'io.palaima.debugdrawer:debugdrawer-no-op:0.8.0'
}

DebugView

dependencies {
   debugImplementation 'io.palaima.debugdrawer:debugdrawer-view:0.8.0'
   releaseImplementation 'io.palaima.debugdrawer:debugdrawer-view-no-op:0.8.0'
}

BuildModule, DeviceModule, SettingsModule, NetworkModule

dependencies {
   implementation 'io.palaima.debugdrawer:debugdrawer-commons:0.8.0'
}

ActionsModule - ButtonAction, SwitchAction, SpinnerAction

dependencies {
   implementation 'io.palaima.debugdrawer:debugdrawer-actions:0.8.0'
}

OkHttpModule, OkHttp3Module OkHttp library required

dependencies {
   implementation 'io.palaima.debugdrawer:debugdrawer-okhttp:0.8.0'
   implementation 'io.palaima.debugdrawer:debugdrawer-okhttp3:0.8.0'
}

PicassoModule Picasso library required

dependencies {
   implementation 'io.palaima.debugdrawer:debugdrawer-picasso:0.8.0'
}

GlideModule Glide library required

dependencies {
   implementation 'io.palaima.debugdrawer:debugdrawer-glide:0.8.0'
}

ScalpelModule Scalpel library required

dependencies {
   implementation 'io.palaima.debugdrawer:debugdrawer-scalpel:0.8.0'
}

LocationModule

dependencies {
   implementation 'io.palaima.debugdrawer:debugdrawer-location:0.8.0'
}

TimberModule Timber library required

dependencies {
   implementation 'io.palaima.debugdrawer:debugdrawer-timber:0.8.0'
}

FpsModule Takt library required

dependencies {
   implementation 'io.palaima.debugdrawer:debugdrawer-fps:0.8.0'
}

LogsModule Lynx & Chuck libraries required

dependencies {
   implementation 'io.palaima.debugdrawer:debugdrawer-logs:0.8.0'
}

NetworkQualityModule OkHttp library required

dependencies {
   implementation 'io.palaima.debugdrawer:debugdrawer-network-quality:0.8.0'
}

Putting All Together

1. Initialization in Activity

You could use DebugDrawer or DebugView depending on your needs

Example using DebugDrawer (For DebugView initialization check DebugViewActivity)


    private DebugDrawer debugDrawer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //...

        SwitchAction switchAction = new SwitchAction("Test switch", new SwitchAction.Listener() {
            @Override
            public void onCheckedChanged(boolean value) {
                Toast.makeText(MainActivity.this, "Switch checked", Toast.LENGTH_LONG).show();
            }
        });

        ButtonAction buttonAction = new ButtonAction("Test button", new ButtonAction.Listener() {
            @Override
            public void onClick() {
                Toast.makeText(MainActivity.this, "Button clicked", Toast.LENGTH_LONG).show();
            }
        });

        SpinnerAction<String> spinnerAction = new SpinnerAction<>(
            Arrays.asList("First", "Second", "Third"),
            new SpinnerAction.OnItemSelectedListener<String>() {
                @Override public void onItemSelected(String value) {
                    Toast.makeText(MainActivity.this, "Spinner item selected - " + value, Toast.LENGTH_LONG).show();
                }
            }
        );

        debugDrawer = new DebugDrawer.Builder(this)
            .modules(
                new ActionsModule(switchAction, buttonAction, spinnerAction),
                new FpsModule(Takt.stock(getApplication())),
                new LocationModule(this),
                new ScalpelModule(this),
                new TimberModule(),
                new OkHttp3Module(okHttpClient),
                new PicassoModule(picasso),
                new GlideModule(Glide.get(getContext())),
                new DeviceModule(this),
                new BuildModule(this),
                new NetworkModule(this),
                new SettingsModule(this)
            ).build();
    }

2. TimberModule

Don't forget to plant needed log trees in Application class. Tree that is used by TimberModule stored in LumberYard class.

Application class example:


    public class DebugDrawerApplication extends Application {
        @Override
        public void onCreate() {
            super.onCreate();

            LumberYard lumberYard = LumberYard.getInstance(this);
            lumberYard.cleanUp();

            Timber.plant(lumberYard.tree());
            Timber.plant(new Timber.DebugTree());
        }
    }

Creating and Publishing Your Own Module

Add implementation 'io.palaima.debugdrawer:debugdrawer-base:0.8.0' to your dependencies

Module must implement DebugModule interface or extend DebugModuleAdapter if you do not need lifecycle hooks


    public interface DebugModule {

        /**
         * Creates module view
         */
        @NonNull View onCreateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent);

        /**
         * Override this method if you need to refresh
         * some information  when drawer is opened
         */
        void onOpened();

        /**
         * Override this method if you need to stop
         * some actions  when drawer is closed
         */
        void onClosed();

        /**
         * Override this method if you need to start
         * some processes
         */
        void onResume();

        /**
         * Override this method if you need to do
         * some clean up
         */
        void onPause();

        /**
         * Override this method if you need to start
         * some processes that would be killed when
         * onStop() is called
         * E.g. register receivers
         */
        void onStart();

        /**
         * Override this method if you need to do
         * some clean up when activity goes to foreground.
         * E.g. unregister receivers
         */
        void onStop();
    }

Sample

You can clone the project and compile it yourself (it includes a sample).

MainActivity

DebugViewActivity

Contributing

Want to contribute? You are welcome!

Pull Requests

  • Fork the repo and create your branch from dev.
  • If you've changed APIs, update the documentation.
  • Make sure your code lints.
  • Change README.md if necessary

Coding Style

  • Opening braces to appear on the same line as code
  • All variables must be camelCase
  • All resources must have dd_ prefix

Developed By

Credits

License

Copyright 2016 Mantas Palaima.

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

Related Skills

View on GitHub
GitHub Stars1.2k
CategoryDevelopment
Updated18d ago
Forks124

Languages

Java

Security Score

100/100

Audited on Mar 10, 2026

No findings