package org.wikipedia.page;
import android.graphics.Typeface;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.ViewFlipper;
import org.wikipedia.LongPressHandler.ListViewContextMenuListener;
import org.wikipedia.R;
import org.wikipedia.history.HistoryEntry;
import org.wikipedia.readinglist.AddToReadingListDialog;
import static org.wikipedia.util.L10nUtil.getStringForArticleLanguage;
/**
* A dialog to host page issues and disambig information.
*/
public class PageInfoDialog extends NoDimBottomSheetDialog {
private final ViewFlipper flipper;
private final TextView disambigHeading;
private final TextView issuesHeading;
private final ListView disambigList;
public PageInfoDialog(final PageFragment fragment, PageInfo pageInfo, boolean startAtDisambig) {
super(fragment.getContext());
View parentView = LayoutInflater.from(fragment.getContext()).inflate(R.layout.dialog_page_info, null);
setContentView(parentView);
flipper = (ViewFlipper) parentView.findViewById(R.id.page_info_flipper);
disambigList = (ListView) parentView.findViewById(R.id.disambig_list);
ListView issuesList = (ListView) parentView.findViewById(R.id.page_issues_list);
disambigHeading = (TextView) parentView.findViewById(R.id.page_info_similar_titles_heading);
issuesHeading = (TextView) parentView.findViewById(R.id.page_info_page_issues_heading);
View separatorHeading = parentView.findViewById(R.id.page_info_heading_separator);
View closeButton = parentView.findViewById(R.id.page_info_close);
disambigHeading.setText(getStringForArticleLanguage(pageInfo.getTitle(), R.string.page_similar_titles));
issuesHeading.setText(getStringForArticleLanguage(pageInfo.getTitle(), R.string.dialog_page_issues));
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
issuesList.setAdapter(new IssuesListAdapter(fragment.getActivity(), pageInfo.getContentIssues()));
disambigList.setAdapter(new DisambigListAdapter(fragment.getActivity(), pageInfo.getSimilarTitles()));
disambigList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
PageTitle title = ((DisambigResult) disambigList.getAdapter().getItem(position)).getTitle();
HistoryEntry historyEntry = new HistoryEntry(title, HistoryEntry.SOURCE_DISAMBIG);
dismiss();
fragment.loadPage(title, historyEntry);
}
});
if (fragment.callback() != null) {
ListViewContextMenuListener contextMenuListener
= new LongPressHandler(fragment.callback());
new org.wikipedia.LongPressHandler(disambigList, HistoryEntry.SOURCE_DISAMBIG,
contextMenuListener);
}
if (pageInfo.getSimilarTitles().length > 0) {
disambigHeading.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDisambig();
}
});
} else {
disambigHeading.setVisibility(View.GONE);
separatorHeading.setVisibility(View.GONE);
}
if (pageInfo.getContentIssues().length > 0) {
issuesHeading.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showIssues();
}
});
} else {
issuesHeading.setVisibility(View.GONE);
separatorHeading.setVisibility(View.GONE);
}
if (startAtDisambig) {
showDisambig();
} else {
showIssues();
}
}
private void showDisambig() {
startExpanded();
if (flipper.getCurrentView() != flipper.getChildAt(0)) {
flipper.setInAnimation(getContext(), R.anim.slide_in_left);
flipper.setOutAnimation(getContext(), R.anim.slide_out_right);
flipper.showNext();
}
disambigHeading.setTypeface(null, Typeface.BOLD);
disambigHeading.setEnabled(false);
issuesHeading.setTypeface(null, Typeface.NORMAL);
issuesHeading.setEnabled(true);
}
private void showIssues() {
if (flipper.getCurrentView() != flipper.getChildAt(1)) {
flipper.setInAnimation(getContext(), R.anim.slide_in_right);
flipper.setOutAnimation(getContext(), R.anim.slide_out_left);
flipper.showPrevious();
}
disambigHeading.setTypeface(null, Typeface.NORMAL);
disambigHeading.setEnabled(true);
issuesHeading.setTypeface(null, Typeface.BOLD);
issuesHeading.setEnabled(false);
}
private class LongPressHandler extends PageContainerLongPressHandler
implements ListViewContextMenuListener {
LongPressHandler(@NonNull PageFragment.Callback callback) {
super(callback);
}
@Override
public PageTitle getTitleForListPosition(int position) {
return ((DisambigResult) disambigList.getAdapter().getItem(position)).getTitle();
}
@Override
public void onOpenLink(PageTitle title, HistoryEntry entry) {
super.onOpenLink(title, entry);
dismiss();
}
@Override
public void onOpenInNewTab(PageTitle title, HistoryEntry entry) {
super.onOpenInNewTab(title, entry);
dismiss();
}
@Override
public void onCopyLink(PageTitle title) {
super.onCopyLink(title);
dismiss();
}
@Override
public void onShareLink(PageTitle title) {
super.onShareLink(title);
dismiss();
}
@Override
public void onAddToList(PageTitle title, AddToReadingListDialog.InvokeSource source) {
super.onAddToList(title, source);
}
}
}