Use MetricsFeatureProvider for condition/suggestion/search.

Bug: 31664539
Test: make RunSettingsRoboTests

This allows different metric clients to listen to these events.

Change-Id: Ib19c8099b16ff78d9aa4901278e0ff33eeefd4a8
diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java
index ca68a74..cc65357 100644
--- a/src/com/android/settings/dashboard/DashboardAdapter.java
+++ b/src/com/android/settings/dashboard/DashboardAdapter.java
@@ -33,11 +33,11 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.internal.util.ArrayUtils;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.dashboard.conditional.Condition;
 import com.android.settings.dashboard.conditional.ConditionAdapterUtils;
 import com.android.settingslib.SuggestionParser;
@@ -71,6 +71,7 @@
     private final IconCache mCache;
 
     private final Context mContext;
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
 
     private List<DashboardCategory> mCategories;
     private List<Condition> mConditions;
@@ -85,9 +86,11 @@
     private Condition mExpandedCondition = null;
     private SuggestionParser mSuggestionParser;
 
-    public DashboardAdapter(Context context, SuggestionParser parser, Bundle savedInstanceState,
-                List<Condition> conditions) {
+    public DashboardAdapter(Context context, SuggestionParser parser,
+            MetricsFeatureProvider metricsFeatureProvider, Bundle savedInstanceState,
+            List<Condition> conditions) {
         mContext = context;
+        mMetricsFeatureProvider = metricsFeatureProvider;
         mCache = new IconCache(context);
         mSuggestionParser = parser;
         mConditions = conditions;
@@ -240,7 +243,8 @@
                 holder.itemView.setOnClickListener(new View.OnClickListener() {
                     @Override
                     public void onClick(View v) {
-                        MetricsLogger.action(mContext, MetricsEvent.ACTION_SETTINGS_SUGGESTION,
+                        mMetricsFeatureProvider.action(mContext,
+                                MetricsEvent.ACTION_SETTINGS_SUGGESTION,
                                 DashboardAdapter.getSuggestionIdentifier(mContext, suggestion));
                         ((SettingsActivity) mContext).startSuggestion(suggestion.intent);
                     }
@@ -276,7 +280,8 @@
                 new MenuItem.OnMenuItemClickListener() {
             @Override
             public boolean onMenuItemClick(MenuItem item) {
-                MetricsLogger.action(mContext, MetricsEvent.ACTION_SETTINGS_DISMISS_SUGGESTION,
+                mMetricsFeatureProvider.action(
+                        mContext, MetricsEvent.ACTION_SETTINGS_DISMISS_SUGGESTION,
                         DashboardAdapter.getSuggestionIdentifier(mContext, suggestion));
                 disableSuggestion(suggestion);
                 mSuggestions.remove(suggestion);
@@ -379,12 +384,12 @@
             return;
         }
         if (v.getTag() == mExpandedCondition) {
-            MetricsLogger.action(mContext, MetricsEvent.ACTION_SETTINGS_CONDITION_CLICK,
+            mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_SETTINGS_CONDITION_CLICK,
                     mExpandedCondition.getMetricsConstant());
             mExpandedCondition.onPrimaryClick();
         } else {
             mExpandedCondition = (Condition) v.getTag();
-            MetricsLogger.action(mContext, MetricsEvent.ACTION_SETTINGS_CONDITION_EXPAND,
+            mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_SETTINGS_CONDITION_EXPAND,
                     mExpandedCondition.getMetricsConstant());
             notifyDataSetChanged();
         }
@@ -392,12 +397,13 @@
 
     public void onExpandClick(View v) {
         if (v.getTag() == mExpandedCondition) {
-            MetricsLogger.action(mContext, MetricsEvent.ACTION_SETTINGS_CONDITION_COLLAPSE,
+            mMetricsFeatureProvider.action(mContext,
+                    MetricsEvent.ACTION_SETTINGS_CONDITION_COLLAPSE,
                     mExpandedCondition.getMetricsConstant());
             mExpandedCondition = null;
         } else {
             mExpandedCondition = (Condition) v.getTag();
-            MetricsLogger.action(mContext, MetricsEvent.ACTION_SETTINGS_CONDITION_EXPAND,
+            mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_SETTINGS_CONDITION_EXPAND,
                     mExpandedCondition.getMetricsConstant());
         }
         notifyDataSetChanged();
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index b54521c..4ca84a1 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -26,16 +26,17 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
-import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.R;
 import com.android.settings.Settings;
 import com.android.settings.SettingsActivity;
+import com.android.settings.core.InstrumentedFragment;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.dashboard.conditional.Condition;
 import com.android.settings.dashboard.conditional.ConditionAdapterUtils;
 import com.android.settings.dashboard.conditional.ConditionManager;
 import com.android.settings.dashboard.conditional.FocusRecyclerView;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.SuggestionParser;
 import com.android.settingslib.drawer.DashboardCategory;
 import com.android.settingslib.drawer.SettingsDrawerActivity;
@@ -122,7 +123,7 @@
         mSummaryLoader.setListening(true);
         for (Condition c : mConditionManager.getConditions()) {
             if (c.shouldShow()) {
-                MetricsLogger.visible(getContext(), c.getMetricsConstant());
+                mMetricsFeatureProvider.visible(getContext(), c.getMetricsConstant());
             }
         }
         if (DEBUG_TIMING) Log.d(TAG, "onResume took " + (System.currentTimeMillis() - startTime)
@@ -137,7 +138,7 @@
         mSummaryLoader.setListening(false);
         for (Condition c : mConditionManager.getConditions()) {
             if (c.shouldShow()) {
-                MetricsLogger.hidden(getContext(), c.getMetricsConstant());
+                mMetricsFeatureProvider.hidden(getContext(), c.getMetricsConstant());
             }
         }
         if (mAdapter.getSuggestions() == null) {
@@ -148,7 +149,7 @@
                 String id = DashboardAdapter.getSuggestionIdentifier(getContext(), suggestion);
                 if (!mSuggestionsHiddenLogged.contains(id)) {
                     mSuggestionsHiddenLogged.add(id);
-                    MetricsLogger.action(getContext(),
+                    mMetricsFeatureProvider.action(getContext(),
                             MetricsEvent.ACTION_HIDE_SETTINGS_SUGGESTION, id);
                 }
             }
@@ -200,8 +201,8 @@
         mDashboard.setHasFixedSize(true);
         mDashboard.addItemDecoration(new DashboardDecorator(getContext()));
         mDashboard.setListener(this);
-        mAdapter = new DashboardAdapter(getContext(), mSuggestionParser, bundle,
-                mConditionManager.getConditions());
+        mAdapter = new DashboardAdapter(getContext(), mSuggestionParser, mMetricsFeatureProvider,
+                bundle, mConditionManager.getConditions());
         mDashboard.setAdapter(mAdapter);
         mSummaryLoader.setAdapter(mAdapter);
         ConditionAdapterUtils.addDismiss(mDashboard);
@@ -246,7 +247,7 @@
                     String id = DashboardAdapter.getSuggestionIdentifier(context, suggestion);
                     if (!mSuggestionsShownLogged.contains(id)) {
                         mSuggestionsShownLogged.add(id);
-                        MetricsLogger.action(context,
+                        mMetricsFeatureProvider.action(context,
                                 MetricsEvent.ACTION_SHOW_SETTINGS_SUGGESTION, id);
                     }
                 }
diff --git a/src/com/android/settings/dashboard/SearchResultsSummary.java b/src/com/android/settings/dashboard/SearchResultsSummary.java
index 087ecad..bd9948b 100644
--- a/src/com/android/settings/dashboard/SearchResultsSummary.java
+++ b/src/com/android/settings/dashboard/SearchResultsSummary.java
@@ -37,12 +37,11 @@
 import android.widget.SearchView;
 import android.widget.TextView;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
-import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.Utils;
+import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.search.Index;
 
 import java.util.HashMap;
@@ -85,8 +84,8 @@
         @Override
         protected void onPostExecute(Cursor cursor) {
             if (!isCancelled()) {
-                MetricsLogger.action(getContext(), MetricsEvent.ACTION_SEARCH_RESULTS,
-                        cursor.getCount());
+                mMetricsFeatureProvider.action(getContext(),
+                        MetricsEvent.ACTION_SEARCH_RESULTS, cursor.getCount());
                 setResultsCursor(cursor);
                 setResultsVisibility(cursor.getCount() > 0);
             } else if (cursor != null) {
diff --git a/src/com/android/settings/dashboard/SupportFragment.java b/src/com/android/settings/dashboard/SupportFragment.java
index 9773a50..c8fed8a 100644
--- a/src/com/android/settings/dashboard/SupportFragment.java
+++ b/src/com/android/settings/dashboard/SupportFragment.java
@@ -36,8 +36,8 @@
 import android.view.ViewGroup;
 
 import com.android.internal.logging.MetricsProto;
-import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.R;
+import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.overlay.SupportFeatureProvider;
 
@@ -89,7 +89,7 @@
         mSupportFeatureProvider =
                 FeatureFactory.getFactory(mActivity).getSupportFeatureProvider(mActivity);
         mSupportItemAdapter = new SupportItemAdapter(mActivity, savedInstanceState,
-                mSupportFeatureProvider, this /* itemClickListener */);
+                mSupportFeatureProvider, mMetricsFeatureProvider, this /* itemClickListener */);
         mConnectivityManager =
                 (ConnectivityManager) mActivity.getSystemService(Context.CONNECTIVITY_SERVICE);
     }
diff --git a/src/com/android/settings/dashboard/SupportItemAdapter.java b/src/com/android/settings/dashboard/SupportItemAdapter.java
index 9ef69883..f966668 100644
--- a/src/com/android/settings/dashboard/SupportItemAdapter.java
+++ b/src/com/android/settings/dashboard/SupportItemAdapter.java
@@ -37,9 +37,9 @@
 import android.widget.Spinner;
 import android.widget.TextView;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.overlay.SupportFeatureProvider;
 import com.android.settings.support.SupportDisclaimerDialogFragment;
 import com.android.settings.support.SupportPhone;
@@ -69,6 +69,7 @@
     private final EscalationClickListener mEscalationClickListener;
     private final SpinnerItemSelectListener mSpinnerItemSelectListener;
     private final SupportFeatureProvider mSupportFeatureProvider;
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
     private final View.OnClickListener mItemClickListener;
     private final List<SupportData> mSupportData;
 
@@ -77,9 +78,12 @@
     private Account mAccount;
 
     public SupportItemAdapter(Activity activity, Bundle savedInstanceState,
-            SupportFeatureProvider supportFeatureProvider, View.OnClickListener itemClickListener) {
+            SupportFeatureProvider supportFeatureProvider,
+            MetricsFeatureProvider metricsFeatureProvider,
+            View.OnClickListener itemClickListener) {
         mActivity = activity;
         mSupportFeatureProvider = supportFeatureProvider;
+        mMetricsFeatureProvider = metricsFeatureProvider;
         mItemClickListener = itemClickListener;
         mEscalationClickListener = new EscalationClickListener();
         mSpinnerItemSelectListener = new SpinnerItemSelectListener();
@@ -141,7 +145,7 @@
             if (data.intent != null &&
                     mActivity.getPackageManager().resolveActivity(data.intent, 0) != null) {
                 if (data.metricsEvent >= 0) {
-                    MetricsLogger.action(mActivity, data.metricsEvent);
+                    mMetricsFeatureProvider.action(mActivity, data.metricsEvent);
                 }
                 mActivity.startActivityForResult(data.intent, 0);
             }
@@ -427,7 +431,7 @@
             if (mAccount == null) {
                 switch (v.getId()) {
                     case android.R.id.text1:
-                        MetricsLogger.action(mActivity,
+                        mMetricsFeatureProvider.action(mActivity,
                                 MetricsProto.MetricsEvent.ACTION_SUPPORT_SIGN_IN);
                         mActivity.startActivityForResult(
                                 mSupportFeatureProvider.getAccountLoginIntent(),
@@ -442,12 +446,12 @@
             } else if (mHasInternet) {
                 switch (v.getId()) {
                     case android.R.id.text1:
-                        MetricsLogger.action(mActivity,
+                        mMetricsFeatureProvider.action(mActivity,
                                 MetricsProto.MetricsEvent.ACTION_SUPPORT_PHONE);
                         tryStartDisclaimerAndSupport(PHONE);
                         break;
                     case android.R.id.text2:
-                        MetricsLogger.action(mActivity,
+                        mMetricsFeatureProvider.action(mActivity,
                                 MetricsProto.MetricsEvent.ACTION_SUPPORT_CHAT);
                         tryStartDisclaimerAndSupport(CHAT);
                         break;
@@ -463,7 +467,7 @@
                                     .queryIntentActivities(intent, 0)
                                     .isEmpty();
                             if (canDial) {
-                                MetricsLogger.action(mActivity,
+                                mMetricsFeatureProvider.action(mActivity,
                                         MetricsProto.MetricsEvent.ACTION_SUPPORT_DAIL_TOLLFREE);
                                 mActivity.startActivity(intent);
                             }
@@ -475,7 +479,7 @@
                                 .getSupportPhones(mSelectedCountry, false /* isTollFree */);
                         final SupportPhoneDialogFragment fragment =
                                 SupportPhoneDialogFragment.newInstance(phone);
-                        MetricsLogger.action(mActivity,
+                        mMetricsFeatureProvider.action(mActivity,
                                 MetricsProto.MetricsEvent.ACTION_SUPPORT_VIEW_TRAVEL_ABROAD_DIALOG);
                         fragment.show(mActivity.getFragmentManager(),
                                 SupportPhoneDialogFragment.TAG);
diff --git a/src/com/android/settings/dashboard/conditional/Condition.java b/src/com/android/settings/dashboard/conditional/Condition.java
index 0454fe8..61889be 100644
--- a/src/com/android/settings/dashboard/conditional/Condition.java
+++ b/src/com/android/settings/dashboard/conditional/Condition.java
@@ -17,11 +17,14 @@
 package com.android.settings.dashboard.conditional;
 
 import android.content.ComponentName;
+import android.content.Context;
 import android.content.pm.PackageManager;
 import android.graphics.drawable.Icon;
 import android.os.PersistableBundle;
-import com.android.internal.logging.MetricsLogger;
+
 import com.android.internal.logging.MetricsProto.MetricsEvent;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
 
 import static android.content.pm.PackageManager.DONT_KILL_APP;
 
@@ -32,6 +35,7 @@
     private static final String KEY_LAST_STATE = "last_state";
 
     protected final ConditionManager mManager;
+    protected final MetricsFeatureProvider mMetricsFeatureProvider;
 
     private boolean mIsSilenced;
     private boolean mIsActive;
@@ -39,7 +43,12 @@
 
     // All conditions must live in this package.
     Condition(ConditionManager manager) {
+       this(manager, FeatureFactory.getFactory(manager.getContext()).getMetricsFeatureProvider());
+    }
+
+    Condition(ConditionManager manager, MetricsFeatureProvider metricsFeatureProvider) {
         mManager = manager;
+        mMetricsFeatureProvider = metricsFeatureProvider;
         Class<?> receiverClass = getReceiverClass();
         if (receiverClass != null && shouldAlwaysListenToBroadcast()) {
             PackageManager pm = mManager.getContext().getPackageManager();
@@ -93,8 +102,9 @@
     public void silence() {
         if (!mIsSilenced) {
             mIsSilenced = true;
-            MetricsLogger.action(mManager.getContext(),
-                    MetricsEvent.ACTION_SETTINGS_CONDITION_DISMISS, getMetricsConstant());
+            Context context = mManager.getContext();
+            mMetricsFeatureProvider.action(context, MetricsEvent.ACTION_SETTINGS_CONDITION_DISMISS,
+                    getMetricsConstant());
             onSilenceChanged(mIsSilenced);
             notifyChanged();
         }
diff --git a/src/com/android/settings/dashboard/conditional/ConditionAdapterUtils.java b/src/com/android/settings/dashboard/conditional/ConditionAdapterUtils.java
index a16de50..0c16527 100644
--- a/src/com/android/settings/dashboard/conditional/ConditionAdapterUtils.java
+++ b/src/com/android/settings/dashboard/conditional/ConditionAdapterUtils.java
@@ -18,6 +18,7 @@
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.ObjectAnimator;
+import android.content.Context;
 import android.support.v7.widget.RecyclerView;
 import android.support.v7.widget.helper.ItemTouchHelper;
 import android.view.View;
@@ -25,10 +26,11 @@
 import android.view.ViewGroup.LayoutParams;
 import android.widget.Button;
 import android.widget.ImageView;
-import com.android.internal.logging.MetricsLogger;
+
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardAdapter;
+import com.android.settings.overlay.FeatureFactory;
 
 public class ConditionAdapterUtils {
 
@@ -94,9 +96,10 @@
                     button.setOnClickListener(new View.OnClickListener() {
                         @Override
                         public void onClick(View v) {
-                            MetricsLogger.action(v.getContext(),
-                                    MetricsEvent.ACTION_SETTINGS_CONDITION_BUTTON,
-                                    condition.getMetricsConstant());
+                            Context context = v.getContext();
+                            FeatureFactory.getFactory(context).getMetricsFeatureProvider()
+                                    .action(context, MetricsEvent.ACTION_SETTINGS_CONDITION_BUTTON,
+                                            condition.getMetricsConstant());
                             condition.onActionClick(index);
                         }
                     });
diff --git a/tests/robotests/src/com/android/internal/app/NightDisplayController.java b/tests/robotests/src/com/android/internal/app/NightDisplayController.java
new file mode 100644
index 0000000..2125c19
--- /dev/null
+++ b/tests/robotests/src/com/android/internal/app/NightDisplayController.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2016 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.app;
+
+/**
+ * Fake controller to make robolectric test compile. Should be removed when Robolectric supports
+ * API 25.
+ */
+public class NightDisplayController {
+
+    public interface Callback {
+
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/dashboard/conditional/ConditionTest.java b/tests/robotests/src/com/android/settings/dashboard/conditional/ConditionTest.java
new file mode 100644
index 0000000..5c0c02a
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/dashboard/conditional/ConditionTest.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2016 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.settings.dashboard.conditional;
+
+import android.content.Context;
+import android.graphics.drawable.Icon;
+
+import com.android.internal.logging.MetricsProto;
+import com.android.settings.TestConfig;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.verify;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class ConditionTest {
+
+    @Mock
+    private ConditionManager mConditionManager;
+    @Mock
+    private MetricsFeatureProvider mMetricsFeatureProvider;
+
+    private TestCondition mCondition;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mCondition = new TestCondition(mConditionManager, mMetricsFeatureProvider);
+    }
+
+    @Test
+    public void initialize_shouldNotBeSilenced() {
+        assertThat(mCondition.isSilenced()).isFalse();
+    }
+
+    @Test
+    public void silence_shouldNotifyDataChangeAndLog() {
+        mCondition.silence();
+
+        assertThat(mCondition.isSilenced()).isTrue();
+        verify(mConditionManager).notifyChanged(mCondition);
+        verify(mMetricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.ACTION_SETTINGS_CONDITION_DISMISS),
+                eq(TestCondition.TEST_METRIC_CONSTANT));
+    }
+
+    private static final class TestCondition extends Condition {
+
+        private static final int TEST_METRIC_CONSTANT = 1234;
+
+        TestCondition(ConditionManager manager,
+                MetricsFeatureProvider metricsFeatureProvider) {
+            super(manager, metricsFeatureProvider);
+        }
+
+        @Override
+        public void refreshState() {
+
+        }
+
+        @Override
+        public int getMetricsConstant() {
+            return TEST_METRIC_CONSTANT;
+        }
+
+        @Override
+        public Icon getIcon() {
+            return null;
+        }
+
+        @Override
+        public CharSequence getTitle() {
+            return null;
+        }
+
+        @Override
+        public CharSequence getSummary() {
+            return null;
+        }
+
+        @Override
+        public CharSequence[] getActions() {
+            return new CharSequence[0];
+        }
+
+        @Override
+        public void onPrimaryClick() {
+
+        }
+
+        @Override
+        public void onActionClick(int index) {
+
+        }
+    }
+}