private void initializeView(String input) {
   if (input == null) {
     input = GlowPadView.DEFAULT_TARGETS;
   }
   mTargetStore.clear();
   final int maxTargets =
       mIsScreenLarge ? GlowPadView.MAX_TABLET_TARGETS : GlowPadView.MAX_PHONE_TARGETS;
   final PackageManager packMan = mActivity.getPackageManager();
   final Drawable activeBack =
       mResources.getDrawable(com.android.internal.R.drawable.ic_lockscreen_target_activated);
   final String[] targetStore = input.split("\\|");
   // Shift by 2 targets for phones in landscape
   if (mIsLandscape && !mIsScreenLarge) {
     mTargetStore.add(new TargetInfo(null));
     mTargetStore.add(new TargetInfo(null));
   }
   // Add the unlock icon
   Drawable unlockFront =
       mResources.getDrawable(com.android.internal.R.drawable.ic_lockscreen_unlock_normal);
   Drawable unlockBack =
       mResources.getDrawable(com.android.internal.R.drawable.ic_lockscreen_unlock_activated);
   mTargetStore.add(new TargetInfo(getLayeredDrawable(unlockBack, unlockFront, 0, true)));
   for (int cc = 0; cc < 8 - mTargetOffset - 1; cc++) {
     String uri = GlowPadView.EMPTY_TARGET;
     Drawable front = null;
     Drawable back = activeBack;
     boolean frontBlank = false;
     String iconType = null;
     String iconSource = null;
     int tmpInset = mTargetInset;
     if (cc < targetStore.length && cc < maxTargets) {
       uri = targetStore[cc];
       if (!uri.equals(GlowPadView.EMPTY_TARGET)) {
         try {
           Intent in = Intent.parseUri(uri, 0);
           if (in.hasExtra(GlowPadView.ICON_FILE)) {
             String rSource = in.getStringExtra(GlowPadView.ICON_FILE);
             File fPath = new File(rSource);
             if (fPath != null) {
               if (fPath.exists()) {
                 front = new BitmapDrawable(getResources(), BitmapFactory.decodeFile(rSource));
               }
             }
           } else if (in.hasExtra(GlowPadView.ICON_RESOURCE)) {
             String rSource = in.getStringExtra(GlowPadView.ICON_RESOURCE);
             String rPackage = in.getStringExtra(GlowPadView.ICON_PACKAGE);
             if (rSource != null) {
               if (rPackage != null) {
                 try {
                   Context rContext = mActivity.createPackageContext(rPackage, 0);
                   int id = rContext.getResources().getIdentifier(rSource, "drawable", rPackage);
                   front = rContext.getResources().getDrawable(id);
                   id =
                       rContext
                           .getResources()
                           .getIdentifier(
                               rSource.replaceAll("_normal", "_activated"), "drawable", rPackage);
                   back = rContext.getResources().getDrawable(id);
                   tmpInset = 0;
                   frontBlank = true;
                 } catch (NameNotFoundException e) {
                   e.printStackTrace();
                 } catch (NotFoundException e) {
                   e.printStackTrace();
                 }
               } else {
                 front =
                     mResources.getDrawable(
                         mResources.getIdentifier(rSource, "drawable", "android"));
                 back =
                     mResources.getDrawable(
                         mResources.getIdentifier(
                             rSource.replaceAll("_normal", "_activated"), "drawable", "android"));
                 tmpInset = 0;
                 frontBlank = true;
               }
             }
           }
           if (front == null) {
             ActivityInfo aInfo = in.resolveActivityInfo(packMan, PackageManager.GET_ACTIVITIES);
             if (aInfo != null) {
               front = aInfo.loadIcon(packMan);
             } else {
               front = mResources.getDrawable(android.R.drawable.sym_def_app_icon).mutate();
             }
           }
         } catch (Exception e) {
         }
       }
     } else if (cc >= maxTargets) {
       mTargetStore.add(new TargetInfo(null));
       continue;
     }
     if (back == null || front == null) {
       Drawable emptyIcon = mResources.getDrawable(R.drawable.ic_empty).mutate();
       front = emptyIcon;
     }
     mTargetStore.add(
         new TargetInfo(
             uri,
             getLayeredDrawable(back, front, tmpInset, frontBlank),
             iconType,
             iconSource,
             front.getConstantState().newDrawable().mutate()));
   }
   ArrayList<TargetDrawable> tDraw = new ArrayList<TargetDrawable>();
   for (TargetInfo i : mTargetStore) {
     if (i != null) {
       tDraw.add(new TargetDrawable(mResources, i.icon));
     } else {
       tDraw.add(new TargetDrawable(mResources, null));
     }
   }
   mWaveView.setTargetResources(tDraw);
 }
  public void updateResources() {
    // Update the search icon with drawable from the search .apk
    if (!mSearchDisabled) {
      Intent intent =
          ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
              .getAssistIntent(mContext, UserHandle.USER_CURRENT);
      if (intent != null) {
        // XXX Hack. We need to substitute the icon here but haven't formalized
        // the public API. The "_google" metadata will be going away, so
        // DON'T USE IT!
        ComponentName component = intent.getComponent();
        boolean replaced =
            mGlowPadView.replaceTargetDrawablesIfPresent(
                component,
                ASSIST_ICON_METADATA_NAME + "_google",
                com.android.internal.R.drawable.ic_action_assist_generic);

        if (!replaced
            && !mGlowPadView.replaceTargetDrawablesIfPresent(
                component,
                ASSIST_ICON_METADATA_NAME,
                com.android.internal.R.drawable.ic_action_assist_generic)) {
          Slog.w(TAG, "Couldn't grab icon from package " + component);
        }
      }
    }

    mGlowPadView.setEnableTarget(
        com.android.internal.R.drawable.ic_lockscreen_camera, !mCameraDisabled);
    mGlowPadView.setEnableTarget(
        com.android.internal.R.drawable.ic_action_assist_generic, !mSearchDisabled);
  }
        public void onTrigger(View v, int target) {
          final int resId = mGlowPadView.getResourceIdForTarget(target);
          switch (resId) {
            case com.android.internal.R.drawable.ic_action_assist_generic:
              Intent assistIntent =
                  ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
                      .getAssistIntent(mContext, UserHandle.USER_CURRENT);
              if (assistIntent != null) {
                mActivityLauncher.launchActivity(assistIntent, false, true, null, null);
              } else {
                Log.w(TAG, "Failed to get intent for assist activity");
              }
              mCallback.userActivity(0);
              break;

            case com.android.internal.R.drawable.ic_lockscreen_camera:
              mActivityLauncher.launchCamera(null, null);
              mCallback.userActivity(0);
              break;

            case com.android.internal.R.drawable.ic_lockscreen_unlock_phantom:
            case com.android.internal.R.drawable.ic_lockscreen_unlock:
              mCallback.userActivity(0);
              mCallback.dismiss(false);
              break;
          }
        }
 @Override
 public void onActivityCreated(Bundle savedInstanceState) {
   super.onActivityCreated(savedInstanceState);
   mWaveView = ((GlowPadView) mActivity.findViewById(R.id.lock_target));
   mWaveView.setOnTriggerListener(this);
   initializeView(
       Settings.System.getString(
           mActivity.getContentResolver(), Settings.System.LOCKSCREEN_TARGETS));
 }
  @Override
  protected void onFinishInflate() {
    super.onFinishInflate();
    mGlowPadView = (GlowPadView) findViewById(R.id.glow_pad_view);
    mGlowPadView.setOnTriggerListener(mOnTriggerListener);
    updateTargets();

    mSecurityMessageDisplay = new KeyguardMessageArea.Helper(this);
    View bouncerFrameView = findViewById(R.id.keyguard_selector_view_frame);
    mBouncerFrame = bouncerFrameView.getBackground();
  }
  @Override
  protected void onFinishInflate() {
    super.onFinishInflate();
    mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mSearchTargetsContainer = findViewById(R.id.search_panel_container);
    mStatusBarTouchProxy = (StatusBarTouchProxy) findViewById(R.id.status_bar_touch_proxy);
    // TODO: fetch views
    mGlowPadView = (GlowPadView) findViewById(R.id.glow_pad_view);
    mGlowPadView.setOnTriggerListener(mGlowPadViewListener);

    setDrawables();
  }
 private void maybeSwapSearchIcon() {
   Intent intent = SearchManager.getAssistIntent(mContext);
   if (intent != null) {
     ComponentName component = intent.getComponent();
     if (component == null
         || !mGlowPadView.replaceTargetDrawablesIfPresent(
             component,
             ASSIST_ICON_METADATA_NAME,
             com.android.internal.R.drawable.ic_action_assist_generic)) {
       if (DEBUG) Slog.v(TAG, "Couldn't grab icon for component " + component);
     }
   }
 }
 public void show(final boolean show, boolean animate) {
   if (!show) {
     final LayoutTransition transitioner = animate ? createLayoutTransitioner() : null;
     ((ViewGroup) mSearchTargetsContainer).setLayoutTransition(transitioner);
   }
   mShowing = show;
   if (show) {
     maybeSwapSearchIcon();
     if (getVisibility() != View.VISIBLE) {
       setVisibility(View.VISIBLE);
       // Don't start the animation until we've created the layer, which is done
       // right before we are drawn
       mGlowPadView.suspendAnimations();
       mGlowPadView.ping();
       getViewTreeObserver().addOnPreDrawListener(mPreDrawListener);
       vibrate();
     }
     setFocusable(true);
     setFocusableInTouchMode(true);
     requestFocus();
   } else {
     setVisibility(View.INVISIBLE);
   }
 }
 @Override
 public void reset() {
   mGlowPadView.reset(false);
 }
 @Override
 public void showUsabilityHint() {
   mGlowPadView.ping();
 }
 public boolean isTargetPresent(int resId) {
   return mGlowPadView.getTargetPosition(resId) != -1;
 }
 public boolean onPreDraw() {
   getViewTreeObserver().removeOnPreDrawListener(this);
   mGlowPadView.resumeAnimations();
   return false;
 }
  private void setDrawables() {
    String target3 =
        Settings.System.getString(
            mContext.getContentResolver(), Settings.System.SYSTEMUI_NAVRING_3);
    if (target3 == null || target3.equals("")) {
      Settings.System.putString(
          mContext.getContentResolver(), Settings.System.SYSTEMUI_NAVRING_3, "assist");
    }

    // Custom Targets
    ArrayList<TargetDrawable> storedDraw = new ArrayList<TargetDrawable>();

    int startPosOffset;
    int endPosOffset;

    if (screenLayout() == Configuration.SCREENLAYOUT_SIZE_XLARGE) {
      startPosOffset = 1;
      endPosOffset = 8;
    } else if (screenLayout() == Configuration.SCREENLAYOUT_SIZE_LARGE) {
      if (mNavRingAmount == 4 || mNavRingAmount == 2) {
        startPosOffset = 0;
        endPosOffset = 1;
      } else {
        startPosOffset = 0;
        endPosOffset = 3;
      }
    } else {
      if (isScreenPortrait() == true) {
        if (mNavRingAmount == 4 || mNavRingAmount == 2) {
          startPosOffset = 0;
          endPosOffset = 1;
        } else {
          startPosOffset = 0;
          endPosOffset = 3;
        }
      } else {
        if (mNavRingAmount == 4 || mNavRingAmount == 2) {
          startPosOffset = 2;
          endPosOffset = 0;
        } else {
          startPosOffset = 2;
          endPosOffset = 1;
        }
      }
    }

    List<String> targetActivities =
        Arrays.asList(
            Settings.System.getString(mContext.getContentResolver(), targetList.get(0)),
            Settings.System.getString(mContext.getContentResolver(), targetList.get(1)),
            Settings.System.getString(mContext.getContentResolver(), targetList.get(2)),
            Settings.System.getString(mContext.getContentResolver(), targetList.get(3)),
            Settings.System.getString(mContext.getContentResolver(), targetList.get(4)));

    // Place Holder Targets
    TargetDrawable cDrawable =
        new TargetDrawable(
            mResources,
            mResources.getDrawable(com.android.internal.R.drawable.ic_lockscreen_camera));
    cDrawable.setEnabled(false);

    // Add Initial Place Holder Targets
    for (int i = 0; i < startPosOffset; i++) {
      storedDraw.add(cDrawable);
    }

    // Add User Targets
    for (int i = 0; i < targetActivities.size(); i++)
      if (targetActivities.get(i) == null
          || targetActivities.get(i).equals("")
          || targetActivities.get(i).equals("none")) {
        storedDraw.add(cDrawable);
      } else if (targetActivities.get(i).equals("screenshot")) {
        storedDraw.add(
            new TargetDrawable(
                mResources, mResources.getDrawable(R.drawable.ic_navbar_screenshot)));
      } else if (targetActivities.get(i).equals("ime_switcher")) {
        storedDraw.add(
            new TargetDrawable(
                mResources, mResources.getDrawable(R.drawable.ic_sysbar_ime_switcher)));
      } else if (targetActivities.get(i).equals("ring_vib")) {
        storedDraw.add(
            new TargetDrawable(mResources, mResources.getDrawable(R.drawable.ic_navbar_vib)));
      } else if (targetActivities.get(i).equals("ring_silent")) {
        storedDraw.add(
            new TargetDrawable(mResources, mResources.getDrawable(R.drawable.ic_navbar_silent)));
      } else if (targetActivities.get(i).equals("ring_vib_silent")) {
        storedDraw.add(
            new TargetDrawable(
                mResources, mResources.getDrawable(R.drawable.ic_navbar_ring_vib_silent)));
      } else if (targetActivities.get(i).equals("killcurrent")) {
        storedDraw.add(
            new TargetDrawable(mResources, mResources.getDrawable(R.drawable.ic_navbar_killtask)));
      } else if (targetActivities.get(i).equals("power")) {
        storedDraw.add(
            new TargetDrawable(mResources, mResources.getDrawable(R.drawable.ic_navbar_power)));
      } else if (targetActivities.get(i).equals("screenoff")) {
        storedDraw.add(
            new TargetDrawable(mResources, mResources.getDrawable(R.drawable.ic_navbar_power)));
      } else if (targetActivities.get(i).equals("assist")) {
        storedDraw.add(
            new TargetDrawable(
                mResources, com.android.internal.R.drawable.ic_action_assist_generic));
      } else if (targetActivities.get(i).startsWith("app:")) {
        try {
          ActivityInfo activityInfo =
              mPackageManager.getActivityInfo(
                  ComponentName.unflattenFromString(targetActivities.get(i).substring(4)),
                  PackageManager.GET_RECEIVERS);
          Drawable activityIcon = activityInfo.loadIcon(mPackageManager);

          storedDraw.add(new TargetDrawable(mResources, activityIcon));
        } catch (Exception e) { // /
        }
      }

    // Add End Place Holder Targets
    for (int i = 0; i < endPosOffset; i++) {
      storedDraw.add(cDrawable);
    }

    mGlowPadView.setTargetResources(storedDraw);
  }