public Action getItem(int position) {

      int filteredPos = 0;
      for (int i = 0; i < mItems.size(); i++) {
        final Action action = mItems.get(i);
        if (mKeyguardShowing && !action.showDuringKeyguard()) {
          continue;
        }
        if (!mDeviceProvisioned && !action.showBeforeProvisioning()) {
          continue;
        }
        if (filteredPos == position) {
          return action;
        }
        filteredPos++;
      }

      throw new IllegalArgumentException(
          "position "
              + position
              + " out of range of showable actions"
              + ", filtered count="
              + getCount()
              + ", keyguardshowing="
              + mKeyguardShowing
              + ", provisioned="
              + mDeviceProvisioned);
    }
    public int getCount() {
      int count = 0;

      for (int i = 0; i < mItems.size(); i++) {
        final Action action = mItems.get(i);

        if (mKeyguardShowing && !action.showDuringKeyguard()) {
          continue;
        }
        if (!mDeviceProvisioned && !action.showBeforeProvisioning()) {
          continue;
        }
        count++;
      }
      return count;
    }