Android Open Source - u2020 Contextual Debug Actions






From Project

Back to project page u2020.

License

The source code is released under:

Apache License

If you think the Android project u2020 listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.jakewharton.u2020.ui.debug;
//  ww  w. ja  v a  2s . c  om
import android.content.Context;
import android.support.v4.widget.DrawerLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import com.jakewharton.u2020.R;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import timber.log.Timber;

public class ContextualDebugActions implements ViewGroup.OnHierarchyChangeListener {
  public interface DebugAction<T extends View> {
    String name();
    Class<T> viewClass();
    void run(T view);
  }

  private final Map<DebugAction<? extends View>, View> buttonMap;
  private final Map<Class<? extends View>, List<DebugAction<? extends View>>> actionMap;

  private final DrawerLayout drawerLayout;
  private final Context drawerContext;
  private final View contextualTitleView;
  private final LinearLayout contextualListView;

  public ContextualDebugActions(DebugAppContainer container, Set<DebugAction<?>> debugActions) {
    buttonMap = new LinkedHashMap<>();
    actionMap = new LinkedHashMap<>();

    drawerLayout = container.drawerLayout;
    drawerContext = container.drawerContext;
    contextualTitleView = container.contextualTitleView;
    contextualListView = container.contextualListView;

    for (DebugAction<?> debugAction : debugActions) {
      putAction(debugAction.viewClass(), debugAction);
    }
  }

  private void putAction(Class<? extends View> view, DebugAction<? extends View> action) {
    Timber.d("Adding %s action for %s.", action.getClass().getSimpleName(), view.getSimpleName());

    List<DebugAction<? extends View>> actions = actionMap.get(view);
    if (actions == null) {
      actions = new ArrayList<>(2);
      actionMap.put(view, actions);
    }
    actions.add(action);
  }

  @Override public void onChildViewAdded(View parent, View child) {
    List<DebugAction<? extends View>> actions = actionMap.get(child.getClass());
    if (actions != null) {
      for (DebugAction<? extends View> action : actions) {
        Timber.d("Adding debug action \"%s\" for %s.", action.name(),
            child.getClass().getSimpleName());

        View button = createButton(action, child);
        buttonMap.put(action, button);
        contextualListView.addView(button);
      }
      updateContextualVisibility();
    }
  }

  @Override public void onChildViewRemoved(View parent, View child) {
    List<DebugAction<? extends View>> actions = actionMap.get(child.getClass());
    if (actions != null) {
      for (DebugAction<? extends View> action : actions) {
        Timber.d("Removing debug action \"%s\" for %s.", action.name(),
            child.getClass().getSimpleName());
        contextualListView.removeView(buttonMap.remove(action));
      }
      updateContextualVisibility();
    }
  }

  private Button createButton(final DebugAction action, final View child) {
    Button button = (Button) LayoutInflater.from(drawerContext)
        .inflate(R.layout.debug_drawer_contextual_action, contextualListView, false);
    button.setText(action.name());
    button.setOnClickListener(new View.OnClickListener() {
      @Override public void onClick(View view) {
        drawerLayout.closeDrawers();
        action.run(child);
      }
    });
    return button;
  }

  private void updateContextualVisibility() {
    int visibility = contextualListView.getChildCount() > 0 ? View.VISIBLE : View.GONE;
    contextualTitleView.setVisibility(visibility);
    contextualListView.setVisibility(visibility);
  }
}




Java Source Code List

com.jakewharton.u2020.DebugU2020Module.java
com.jakewharton.u2020.Modules.java
com.jakewharton.u2020.Modules.java
com.jakewharton.u2020.U2020App.java
com.jakewharton.u2020.U2020Module.java
com.jakewharton.u2020.data.AnimationSpeed.java
com.jakewharton.u2020.data.ApiEndpoint.java
com.jakewharton.u2020.data.ApiEndpoints.java
com.jakewharton.u2020.data.DataModule.java
com.jakewharton.u2020.data.DebugDataModule.java
com.jakewharton.u2020.data.GalleryDatabase.java
com.jakewharton.u2020.data.IsMockMode.java
com.jakewharton.u2020.data.MockRequestHandler.java
com.jakewharton.u2020.data.NetworkProxy.java
com.jakewharton.u2020.data.PicassoDebugging.java
com.jakewharton.u2020.data.PixelGridEnabled.java
com.jakewharton.u2020.data.PixelRatioEnabled.java
com.jakewharton.u2020.data.ScalpelEnabled.java
com.jakewharton.u2020.data.ScalpelWireframeEnabled.java
com.jakewharton.u2020.data.SeenDebugDrawer.java
com.jakewharton.u2020.data.api.ApiHeaders.java
com.jakewharton.u2020.data.api.ApiModule.java
com.jakewharton.u2020.data.api.ClientId.java
com.jakewharton.u2020.data.api.DebugApiModule.java
com.jakewharton.u2020.data.api.GalleryService.java
com.jakewharton.u2020.data.api.MockGalleryService.java
com.jakewharton.u2020.data.api.Section.java
com.jakewharton.u2020.data.api.ServerDatabase.java
com.jakewharton.u2020.data.api.SortUtil.java
com.jakewharton.u2020.data.api.Sort.java
com.jakewharton.u2020.data.api.model.Gallery.java
com.jakewharton.u2020.data.api.model.Image.java
com.jakewharton.u2020.data.api.model.ImgurResponse.java
com.jakewharton.u2020.data.api.model.MockImageLoader.java
com.jakewharton.u2020.data.api.transforms.GalleryToImageList.java
com.jakewharton.u2020.data.prefs.BooleanPreference.java
com.jakewharton.u2020.data.prefs.IntPreference.java
com.jakewharton.u2020.data.prefs.StringPreference.java
com.jakewharton.u2020.data.rx.EndObserver.java
com.jakewharton.u2020.data.rx.EndlessObserver.java
com.jakewharton.u2020.ui.ActivityHierarchyServer.java
com.jakewharton.u2020.ui.AppContainer.java
com.jakewharton.u2020.ui.DebugUiModule.java
com.jakewharton.u2020.ui.MainActivity.java
com.jakewharton.u2020.ui.UiModule.java
com.jakewharton.u2020.ui.debug.AnimationSpeedAdapter.java
com.jakewharton.u2020.ui.debug.ContextualDebugActions.java
com.jakewharton.u2020.ui.debug.DebugAppContainer.java
com.jakewharton.u2020.ui.debug.EnumAdapter.java
com.jakewharton.u2020.ui.debug.HierarchyTreeChangeListener.java
com.jakewharton.u2020.ui.debug.NetworkDelayAdapter.java
com.jakewharton.u2020.ui.debug.NetworkErrorAdapter.java
com.jakewharton.u2020.ui.debug.NetworkVarianceAdapter.java
com.jakewharton.u2020.ui.debug.ProxyAdapter.java
com.jakewharton.u2020.ui.debug.SocketActivityHierarchyServer.java
com.jakewharton.u2020.ui.gallery.GalleryAdapter.java
com.jakewharton.u2020.ui.gallery.GalleryItemView.java
com.jakewharton.u2020.ui.gallery.GalleryView.java
com.jakewharton.u2020.ui.misc.BetterViewAnimator.java
com.jakewharton.u2020.ui.misc.BindableAdapter.java
com.jakewharton.u2020.ui.misc.ForegroundImageView.java
com.jakewharton.u2020.util.Strings.java