content: /*
   * Copyright (C) 2018 The Android Open Source Project
   *
   * 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.android.internal.globalactions;
  
  import android.content.Context;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.BaseAdapter;
  import java.util.function.BooleanSupplier;
  import java.util.List;
  
  /**
   * The adapter used for the list within the global actions dialog, taking into account whether the
   * keyguard is showing via {@link LegacyGlobalActions#mKeyguardShowing} and whether the device is
   * provisioned via {@link LegacyGlobalActions#mDeviceProvisioned}.
   */
  public class ActionsAdapter extends BaseAdapter {
      private final Context mContext;
      private final List<Action> mItems;
      private final BooleanSupplier mDeviceProvisioned;
      private final BooleanSupplier mKeyguardShowing;
  
      public ActionsAdapter(Context context, List<Action> items,
              BooleanSupplier deviceProvisioned, BooleanSupplier keyguardShowing) {
          mContext = context;
          mItems = items;
          mDeviceProvisioned = deviceProvisioned;
          mKeyguardShowing = keyguardShowing;
      }
  
      @Override
      public int getCount() {
          final boolean keyguardShowing = mKeyguardShowing.getAsBoolean();
          final boolean deviceProvisioned = mDeviceProvisioned.getAsBoolean();
          int count = 0;
  
          for (int i = 0; i < mItems.size(); i++) {
              final Action action = mItems.get(i);
  
              if (keyguardShowing && !action.showDuringKeyguard()) {
                  continue;
              }
              if (!deviceProvisioned && !action.showBeforeProvisioning()) {
                  continue;
              }
              count++;
          }
          return count;
      }
  
      @Override
      public boolean isEnabled(int position) {
          return getItem(position).isEnabled();
      }
  
      @Override
      public boolean areAllItemsEnabled() {
          return false;
      }
  
      @Override
      public Action getItem(int position) {
          final boolean keyguardShowing = mKeyguardShowing.getAsBoolean();
          final boolean deviceProvisioned = mDeviceProvisioned.getAsBoolean();
  
          int filteredPos = 0;
          for (int i = 0; i < mItems.size(); i++) {
              final Action action = mItems.get(i);
              if (keyguardShowing && !action.showDuringKeyguard()) {
                  continue;
              }
              if (!deviceProvisioned && !action.showBeforeProvisioning()) {
                  continue;
              }
              if (filteredPos == position) {
                  return action;
              }
              filteredPos++;
          }
  
          throw new IllegalArgumentException("position " + position
                  + " out of range of showable actions"
                  + ", filtered count=" + getCount()
                  + ", keyguardshowing=" + keyguardShowing
                  + ", provisioned=" + deviceProvisioned);
      }
  
      @Override
      public long getItemId(int position) {
          return position;
      }
  
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
          Action action = getItem(position);
          return action.create(mContext, convertView, parent, LayoutInflater.from(mContext));
      }
  }
  