Android Open Source - device-frame-generator Contextual Debug Actions






From Project

Back to project page device-frame-generator.

License

The source code is released under:

Apache License

If you think the Android project device-frame-generator 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

/*
 * Copyright 2014 Prateek Srivastava (@f2prateek)
 *//ww w  . java 2 s  . co m
 * 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
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.f2prateek.dfg.ui.debug;

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.f2prateek.dfg.R;
import com.f2prateek.ln.Ln;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

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) {
    Ln.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) {
        Ln.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) {
        Ln.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.f2prateek.dfg.AnalyticsKey.java
com.f2prateek.dfg.AppConstants.java
com.f2prateek.dfg.CrashlyticsLn.java
com.f2prateek.dfg.DFGApplicationModule.java
com.f2prateek.dfg.DFGApplication.java
com.f2prateek.dfg.DebugDFGApplicationModule.java
com.f2prateek.dfg.DeviceModule.java
com.f2prateek.dfg.DeviceProvider.java
com.f2prateek.dfg.Events.java
com.f2prateek.dfg.ForApplication.java
com.f2prateek.dfg.Modules.java
com.f2prateek.dfg.Modules.java
com.f2prateek.dfg.Utils.java
com.f2prateek.dfg.core.AbstractGenerateFrameService.java
com.f2prateek.dfg.core.DeviceFrameGenerator.java
com.f2prateek.dfg.core.GenerateFrameService.java
com.f2prateek.dfg.core.GenerateMultipleFramesService.java
com.f2prateek.dfg.model.Bounds.java
com.f2prateek.dfg.model.Device.java
com.f2prateek.dfg.model.Orientation.java
com.f2prateek.dfg.prefs.DebugPreferencesModule.java
com.f2prateek.dfg.prefs.DefaultDevice.java
com.f2prateek.dfg.prefs.FirstRun.java
com.f2prateek.dfg.prefs.GlareEnabled.java
com.f2prateek.dfg.prefs.PreferencesModule.java
com.f2prateek.dfg.prefs.ShadowEnabled.java
com.f2prateek.dfg.prefs.debug.AnimationSpeed.java
com.f2prateek.dfg.prefs.debug.PicassoDebugging.java
com.f2prateek.dfg.prefs.debug.PixelGridEnabled.java
com.f2prateek.dfg.prefs.debug.PixelRatioEnabled.java
com.f2prateek.dfg.prefs.debug.ScalpelEnabled.java
com.f2prateek.dfg.prefs.debug.ScalpelWireframeEnabled.java
com.f2prateek.dfg.prefs.debug.SeenDebugDrawer.java
com.f2prateek.dfg.prefs.model.BooleanPreference.java
com.f2prateek.dfg.prefs.model.IntPreference.java
com.f2prateek.dfg.prefs.model.StringPreference.java
com.f2prateek.dfg.ui.ActivityHierarchyServer.java
com.f2prateek.dfg.ui.AppContainer.java
com.f2prateek.dfg.ui.BindableAdapter.java
com.f2prateek.dfg.ui.DebugUiModule.java
com.f2prateek.dfg.ui.DeviceFragmentPagerAdapter.java
com.f2prateek.dfg.ui.SocketActivityHierarchyServer.java
com.f2prateek.dfg.ui.UiModule.java
com.f2prateek.dfg.ui.activities.BaseActivity.java
com.f2prateek.dfg.ui.activities.MainActivity.java
com.f2prateek.dfg.ui.activities.ReceiverActivity.java
com.f2prateek.dfg.ui.debug.AnimationSpeedAdapter.java
com.f2prateek.dfg.ui.debug.ContextualDebugActions.java
com.f2prateek.dfg.ui.debug.DebugAppContainer.java
com.f2prateek.dfg.ui.debug.HierarchyTreeChangeListener.java
com.f2prateek.dfg.ui.fragments.AboutFragment.java
com.f2prateek.dfg.ui.fragments.BaseFragment.java
com.f2prateek.dfg.ui.fragments.DeviceFragment.java
com.f2prateek.dfg.ui.widgets.ForegroundImageView.java