package com.jbirdvegas.mgerrit.objects; /* * Copyright (C) 2014 Android Open Kang Project (AOKP) * Author: Evan Conway (P4R4N01D), 2014 * * 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. */ import android.content.Context; import android.view.ActionMode; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import com.jbirdvegas.mgerrit.R; import com.jbirdvegas.mgerrit.cards.PatchSetChangesCard; import com.jbirdvegas.mgerrit.database.Changes; import com.jbirdvegas.mgerrit.helpers.Tools; /** * Handler for the Changed files contextual action bar. */ public class FilesCAB implements ActionMode.Callback { // Whether to enable the internal viewer icon private final boolean mShowViewer; // Backing action mode where the data is tagged private ActionMode mActionMode; // View/activity context for both database access and dialog drawing private final Context mContext; // The title to be shown in the CAB private String mSelectedFile; public FilesCAB(Context context, boolean diffSupported) { mContext = context; mShowViewer = diffSupported; } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.changed_file_menu, menu); return true; } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { // Set the selected file name as the title, note group headers do not have a file name if (mSelectedFile != null) { mode.setTitle(Tools.getFileName(mSelectedFile)); } // Enable/Disable the diff viewer icon final MenuItem viewerItem = menu.findItem(R.id.menu_diff_internal); viewerItem.setEnabled(mShowViewer); return true; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { TagHolder holder = (TagHolder) mode.getTag(); holder.setChangeNumberFromID(mContext); switch (item.getItemId()) { case R.id.menu_diff_internal: PatchSetChangesCard.launchDiffViewer(mContext, holder.changeNumber, holder.patchset, holder.filePath); break; case R.id.menu_diff_external: PatchSetChangesCard.launchDiffInBrowser(mContext, holder.changeNumber, holder.patchset, holder.filePath); break; default: return false; } mode.finish(); return true; } @Override public void onDestroyActionMode(ActionMode mode) { mActionMode = null; } public void setActionMode(ActionMode mActionMode) { this.mActionMode = mActionMode; } public ActionMode getActionMode() { return mActionMode; } public void setTitle(String fileName) { mSelectedFile = fileName; } /** * ActionMode only supports one default tag to be set, so this is a container * class where we can set multiple data items. */ public static class TagHolder { public Integer changeNumber; public final String filePath; public final Integer patchset; public final String changeID; public final int groupPosition; public final boolean isChild; public TagHolder(View view, Context context, int groupPos, boolean child) { changeNumber = (Integer) view.getTag(R.id.changeNumber); filePath = (String) view.getTag(R.id.filePath); patchset = (Integer) view.getTag(R.id.patchSetNumber); changeID = (String) view.getTag(R.id.changeID); setChangeNumberFromID(context); groupPosition = groupPos; isChild = child; } public void setChangeNumberFromID(Context context) { if (changeNumber == null && changeID != null) { changeNumber = Changes.getChangeNumberForChange(context, changeID); } } } }