diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp index 12943cd8d2..24ab8e9e43 100644 --- a/android/jni/com/mapswithme/maps/Framework.cpp +++ b/android/jni/com/mapswithme/maps/Framework.cpp @@ -542,6 +542,11 @@ void Framework::SetActiveUserMark(UserMark const * mark) m_activeUserMark = mark; } +UserMark const * Framework::GetActiveUserMark() +{ + return m_activeUserMark; +} + bool Framework::NeedMigrate() { return platform::migrate::NeedMigrate(); @@ -552,10 +557,6 @@ void Framework::Migrate() m_work.Migrate(); } -UserMark const * Framework::GetActiveUserMark() -{ - return m_activeUserMark; -} } // namespace android //============ GLUE CODE for com.mapswithme.maps.Framework class =============// diff --git a/android/src/com/mapswithme/country/BaseDownloadAdapter.java b/android/src/com/mapswithme/country/BaseDownloadAdapter.java index 94eba9b233..61b740cbd8 100644 --- a/android/src/com/mapswithme/country/BaseDownloadAdapter.java +++ b/android/src/com/mapswithme/country/BaseDownloadAdapter.java @@ -39,13 +39,13 @@ abstract class BaseDownloadAdapter extends BaseAdapter static final int TYPE_COUNTRY_IN_PROCESS = 2; static final int TYPE_COUNTRY_READY = 3; static final int TYPE_COUNTRY_NOT_DOWNLOADED = 4; - static final int TYPES_COUNT = 5; + static final int TYPES_COUNT = TYPE_COUNTRY_NOT_DOWNLOADED + 1; private int mActiveAnimationsCount; private static final String PROPERTY_TRANSLATION_X = "translationX"; private static final long ANIMATION_LENGTH = 250; private final Handler mHandler = new Handler(); - private ListView mListView; + ListView mListView; private static class SafeAdapterRunnable implements Runnable { @@ -141,9 +141,19 @@ abstract class BaseDownloadAdapter extends BaseAdapter @Override public abstract CountryItem getItem(int position); + protected int adjustPosition(int position) + { + return position; + } + + protected int unadjustPosition(int position) + { + return position; + } + private void processNotDownloaded(final String name, final int position, final int newOptions, final ViewHolder holder) { - final long[] remoteSizes = getRemoteItemSizes(position); + final long[] remoteSizes = getRemoteItemSizes(adjustPosition(position)); final long size = newOptions > StorageOptions.MAP_OPTION_MAP_ONLY ? remoteSizes[0] : remoteSizes[1]; DownloadHelper.downloadWithCellularCheck(mFragment.getActivity(), size, name, new DownloadHelper.OnDownloadListener() { @@ -354,6 +364,7 @@ abstract class BaseDownloadAdapter extends BaseAdapter if (item == null) return; + final int adjustedPosition = adjustPosition(position); holder.mInfoSlided.setTranslationX(0); holder.mInfo.setTranslationX(0); holder.mProgress.setTranslationX(0); @@ -375,7 +386,7 @@ abstract class BaseDownloadAdapter extends BaseAdapter }); // FIXME when only routing is downloaded, second size in returned array is incorrect and contains total map+routing size. - sizes = getDownloadableItemSizes(position); + sizes = getDownloadableItemSizes(adjustedPosition); setHolderSizeString(holder, 0, sizes[1]); final int percent = (int) (sizes[0] * 100 / sizes[1]); setHolderPercentText(holder, percent + "%"); @@ -391,13 +402,13 @@ abstract class BaseDownloadAdapter extends BaseAdapter @Override public void onClick(View v) { - startItemUpdating(holder, position, getItem(position).getOptions()); + startItemUpdating(holder, adjustedPosition, item.getOptions()); Statistics.INSTANCE.trackEvent(Statistics.EventName.DOWNLOADER_MAP_UPDATE); } }); bindCarRoutingIcon(holder, item); - sizes = getDownloadableItemSizes(position); + sizes = getDownloadableItemSizes(adjustedPosition); setHolderSizeString(holder, 0, sizes[1]); setHolderPercentText(holder, mStatusOutdated); setHolderPercentColor(holder, ThemeUtils.getColor(mListView.getContext(), R.attr.colorAccent)); @@ -408,7 +419,7 @@ abstract class BaseDownloadAdapter extends BaseAdapter UiUtils.show(holder.mInfoSlided, holder.mImageRoutingStatus); bindCarRoutingIcon(holder, item); - sizes = getRemoteItemSizes(position); + sizes = getRemoteItemSizes(adjustedPosition); if (item.getOptions() == StorageOptions.MAP_OPTION_MAP_ONLY) { setHolderPercentText(holder, mMapOnly); @@ -432,7 +443,7 @@ abstract class BaseDownloadAdapter extends BaseAdapter @Override public void onClick(View v) { - processFailed(holder, position); + processFailed(holder, adjustedPosition); } }; holder.mProgressSlided.setOnClickListener(listener); @@ -440,7 +451,7 @@ abstract class BaseDownloadAdapter extends BaseAdapter holder.mProgressSlided.setProgressColor(mColorFailed); holder.mProgressSlided.setCenterDrawable(ContextCompat.getDrawable(mFragment.getActivity(), R.drawable.ic_retry_failed)); - sizes = getDownloadableItemSizes(position); + sizes = getDownloadableItemSizes(adjustedPosition); setHolderSizeString(holder, 0, sizes[1]); setHolderPercentText(holder, mStatusFailed); setHolderPercentColor(holder, mColorFailed); @@ -461,7 +472,7 @@ abstract class BaseDownloadAdapter extends BaseAdapter }); holder.mInfoSlided.setVisibility(View.VISIBLE); - sizes = getDownloadableItemSizes(position); + sizes = getDownloadableItemSizes(adjustedPosition); setHolderSizeString(holder, 0, sizes[1]); setHolderPercentText(holder, mFragment.getString(R.string.downloader_queued)); setHolderPercentColor(holder, mFragment.getResources().getColor(R.color.downloader_gray)); @@ -472,7 +483,7 @@ abstract class BaseDownloadAdapter extends BaseAdapter UiUtils.hide(holder.mProgress, holder.mImageRoutingStatus, holder.mProgressSlided); UiUtils.invisible(holder.mInfoSlided); - sizes = getRemoteItemSizes(position); + sizes = getRemoteItemSizes(adjustedPosition); setHolderSizeString(holder, sizes[0], sizes[1]); setHolderPercentText(holder, mStatusNotDownloaded); setHolderPercentColor(holder, ThemeUtils.getColor(mListView.getContext(), R.attr.colorAccent)); @@ -526,7 +537,7 @@ abstract class BaseDownloadAdapter extends BaseAdapter holder.animator = animatorSet; mActiveAnimationsCount++; - downloadCountry(position, newOptions); + downloadCountry(adjustPosition(position), newOptions); } private static void setDownloadingViewsVisible(ViewHolder holder, boolean visible) @@ -622,7 +633,7 @@ abstract class BaseDownloadAdapter extends BaseAdapter } mHandler.postDelayed(mDatasetChangedRunnable, ANIMATION_LENGTH); - cancelDownload(position); // cancel download before checking real item status(now its just DOWNLOADING or IN_QUEUE) + cancelDownload(adjustPosition(position)); // cancel download before checking real item status(now its just DOWNLOADING or IN_QUEUE) } private static void setHolderSizeString(ViewHolder holder, long first, long second) @@ -702,7 +713,7 @@ abstract class BaseDownloadAdapter extends BaseAdapter /** * Called from children to notify about item progress. */ - protected void onCountryProgress(int position, long current, long total) + void onCountryProgress(int position, long current, long total) { if (mListView == null || !mFragment.isAdded()) return; @@ -710,9 +721,8 @@ abstract class BaseDownloadAdapter extends BaseAdapter // Do update only one item's view; don't call notifyDataSetChanged int index = (position - mListView.getFirstVisiblePosition()); - // Skip first two items if at the root level - if (!(this instanceof DownloadedAdapter) && !CountryTree.hasParent()) - index += 2; + // Skip first two items if at the root level and there are downloaded maps + index = unadjustPosition(index); final View v = mListView.getChildAt(index); if (v != null) @@ -727,6 +737,11 @@ abstract class BaseDownloadAdapter extends BaseAdapter } } + protected boolean hasHeaderItems() + { + return false; + } + void showCountryContextMenu(final CountryItem countryItem, final View anchor, final int position) { if (countryItem == null || anchor.getParent() == null) @@ -741,6 +756,7 @@ abstract class BaseDownloadAdapter extends BaseAdapter final int status = countryItem.getStatus(); final String name = countryItem.getName(); + final int adjustedPosition = adjustPosition(position); OnMenuItemClickListener menuItemClickListener = new OnMenuItemClickListener() { @@ -753,22 +769,22 @@ abstract class BaseDownloadAdapter extends BaseAdapter switch (id) { case MENU_DELETE: - processOnDisk(name, position, StorageOptions.MAP_OPTION_MAP_ONLY); + processOnDisk(name, adjustedPosition, StorageOptions.MAP_OPTION_MAP_ONLY); break; case MENU_CANCEL: confirmDownloadCancellation(holder, position, name); break; case MENU_EXPLORE: - showCountry(position); + showCountry(adjustedPosition); break; case MENU_DOWNLOAD: processNotDownloaded(name, position, StorageOptions.MAP_OPTION_MAP_AND_CAR_ROUTING, holder); break; case MENU_UPDATE: - processOutOfDate(name, position, StorageOptions.MAP_OPTION_MAP_AND_CAR_ROUTING); + processOutOfDate(name, adjustedPosition, StorageOptions.MAP_OPTION_MAP_AND_CAR_ROUTING); break; case MENU_RETRY: - processFailed(holder, position); + processFailed(holder, adjustedPosition); break; } @@ -776,7 +792,7 @@ abstract class BaseDownloadAdapter extends BaseAdapter } }; - long[] remoteSizes = getRemoteItemSizes(position); + long[] remoteSizes = getRemoteItemSizes(adjustedPosition); BottomSheetHelper.Builder bs = BottomSheetHelper.create(mFragment.getActivity(), name) .listener(menuItemClickListener); diff --git a/android/src/com/mapswithme/country/DownloadAdapter.java b/android/src/com/mapswithme/country/DownloadAdapter.java index 5971fc0b4f..a77ea247fe 100644 --- a/android/src/com/mapswithme/country/DownloadAdapter.java +++ b/android/src/com/mapswithme/country/DownloadAdapter.java @@ -1,15 +1,162 @@ package com.mapswithme.country; +import android.database.DataSetObserver; import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import com.mapswithme.maps.R; import com.mapswithme.util.Utils; class DownloadAdapter extends BaseDownloadAdapter implements CountryTree.CountryTreeListener { - public DownloadAdapter(DownloadFragment fragment) + private static final int EXTENDED_VIEWS_COUNT = 2; // 3 more views at the top of baseadapter + private static final int DOWNLOADED_ITEM_POSITION = 0; + private static final int EXTENDED_VIEW_TYPE_COUNT = 2; // one for placeholder, other for downloader view + private static final int TYPE_PLACEHOLDER = 5; + static final int TYPE_EXTENDED = 6; + + private int mLastDownloadedCount = -1; + + private static class ViewHolder extends BaseDownloadAdapter.ViewHolder + { + TextView tvCount; + + @Override + void initFromView(View v) + { + super.initFromView(v); + tvCount = (TextView) v.findViewById(R.id.tv__count); + } + } + + @Override + protected int adjustPosition(int position) + { + if (hasHeaderItems()) + return position - EXTENDED_VIEWS_COUNT; + + return position; + } + + @Override + protected int unadjustPosition(int position) + { + if (hasHeaderItems()) + return position + EXTENDED_VIEWS_COUNT; + + return position; + } + + DownloadAdapter(DownloadFragment fragment) { super(fragment); CountryTree.setDefaultRoot(); + + mFragment.getDownloadedAdapter().registerDataSetObserver(new DataSetObserver() + { + @Override + public void onChanged() + { + onDownloadedCountChanged(mFragment.getDownloadedAdapter().getCount()); + } + }); + } + + @Override + public boolean isEnabled(int position) + { + if (hasHeaderItems()) + { + if (position == DOWNLOADED_ITEM_POSITION) + return true; + + if (position < EXTENDED_VIEWS_COUNT) + return false; + } + + return super.isEnabled(position); + } + + @Override + public int getViewTypeCount() + { + return super.getViewTypeCount() + EXTENDED_VIEW_TYPE_COUNT; + } + + @Override + public int getItemViewType(int position) + { + if (hasHeaderItems()) + { + if (position == DOWNLOADED_ITEM_POSITION) + return TYPE_EXTENDED; + + if (position < EXTENDED_VIEWS_COUNT) + return TYPE_PLACEHOLDER; + } + + return super.getItemViewType(position); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) + { + final int viewType = getItemViewType(position); + ViewHolder holder = new ViewHolder(); + if (viewType == TYPE_PLACEHOLDER) + { + final View view = getPlaceholderView(parent); + holder.initFromView(view); + view.setTag(holder); + return view; + } + + if (viewType == TYPE_EXTENDED) + { + final View view = getExtendedView(parent); + holder.initFromView(view); + final int count = ActiveCountryTree.getOutOfDateCount(); + if (count > 0) + { + holder.tvCount.setVisibility(View.VISIBLE); + holder.tvCount.setText(String.valueOf(count)); + } + else + holder.tvCount.setVisibility(View.GONE); + view.setTag(holder); + return view; + } + + return super.getView(position, convertView, parent); + } + + private View getPlaceholderView(ViewGroup parent) + { + return mInflater.inflate(R.layout.download_item_placeholder, parent, false); + } + + private View getExtendedView(ViewGroup parent) + { + return mInflater.inflate(R.layout.download_item_extended, parent, false); + } + + private void onDownloadedCountChanged(int newCount) + { + if (mLastDownloadedCount != newCount) + { + mLastDownloadedCount = newCount; + notifyDataSetChanged(); + } + } + + @Override + protected boolean hasHeaderItems() + { + if (mLastDownloadedCount == -1) + mLastDownloadedCount = mFragment.getDownloadedAdapter().getCount(); + + return !CountryTree.hasParent() && (mLastDownloadedCount > 0); } @Override @@ -23,7 +170,7 @@ class DownloadAdapter extends BaseDownloadAdapter implements CountryTree.Country return; if (item.hasChildren()) // expand next level - expandGroup(position); + expandGroup(adjustPosition(position)); else showCountryContextMenu(item, view, position); } @@ -31,13 +178,18 @@ class DownloadAdapter extends BaseDownloadAdapter implements CountryTree.Country @Override public int getCount() { - return CountryTree.getChildCount(); + int res = CountryTree.getChildCount(); + + if (hasHeaderItems()) + res += EXTENDED_VIEWS_COUNT; + + return res; } @Override public CountryItem getItem(int position) { - return CountryTree.getChildItem(position); + return CountryTree.getChildItem(adjustPosition(position)); } @Override @@ -131,6 +283,6 @@ class DownloadAdapter extends BaseDownloadAdapter implements CountryTree.Country @Override public void onItemStatusChanged(int position) { - onCountryStatusChanged(position); + onCountryStatusChanged(unadjustPosition(position)); } } diff --git a/android/src/com/mapswithme/country/DownloadFragment.java b/android/src/com/mapswithme/country/DownloadFragment.java index ad24878998..42c2d3108c 100644 --- a/android/src/com/mapswithme/country/DownloadFragment.java +++ b/android/src/com/mapswithme/country/DownloadFragment.java @@ -6,7 +6,6 @@ import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; @@ -20,7 +19,7 @@ import com.mapswithme.util.Utils; public class DownloadFragment extends BaseMwmListFragment implements View.OnClickListener, ActiveCountryTree.ActiveCountryListener, OnBackPressListener { - private ExtendedDownloadAdapterWrapper mExtendedAdapter; + private DownloadAdapter mDownloadAdapter; private DownloadedAdapter mDownloadedAdapter; private TextView mTvUpdateAll; private View mDownloadAll; @@ -45,7 +44,7 @@ public class DownloadFragment extends BaseMwmListFragment implements View.OnClic throw new IllegalArgumentException("Attempt to apply unsupported theme: " + theme); } - protected LayoutInflater getLayoutInflater() + LayoutInflater getLayoutInflater() { if (mLayoutInflater == null) mLayoutInflater = ThemeUtils.themedInflater(getActivity().getLayoutInflater(), getTheme()); @@ -68,8 +67,8 @@ public class DownloadFragment extends BaseMwmListFragment implements View.OnClic openDownloadedList(); else { - mExtendedAdapter = getExtendedAdapter(); - setListAdapter(mExtendedAdapter); + mDownloadAdapter = getDownloadAdapter(); + setListAdapter(mDownloadAdapter); mMode = MODE_DISABLED; mListenerSlotId = ActiveCountryTree.addListener(this); } @@ -104,15 +103,11 @@ public class DownloadFragment extends BaseMwmListFragment implements View.OnClic ActiveCountryTree.removeListener(mListenerSlotId); } - private BaseDownloadAdapter getDownloadAdapter() - { - return (BaseDownloadAdapter) getListView().getAdapter(); - } - @Override public void onResume() { super.onResume(); + getDownloadedAdapter().setCountryListener(); getDownloadAdapter().onResume(getListView()); } @@ -120,6 +115,7 @@ public class DownloadFragment extends BaseMwmListFragment implements View.OnClic public void onPause() { super.onPause(); + getDownloadedAdapter().resetCountryListener(); getDownloadAdapter().onPause(); } @@ -135,9 +131,9 @@ public class DownloadFragment extends BaseMwmListFragment implements View.OnClic { mMode = MODE_DISABLED; mDownloadedAdapter.onPause(); - mExtendedAdapter = getExtendedAdapter(); - mExtendedAdapter.onResume(getListView()); - setListAdapter(mExtendedAdapter); + mDownloadAdapter = getDownloadAdapter(); + mDownloadAdapter.onResume(getListView()); + setListAdapter(mDownloadAdapter); updateToolbar(); } else @@ -189,7 +185,7 @@ public class DownloadFragment extends BaseMwmListFragment implements View.OnClic @Override public void onListItemClick(ListView l, View v, int position, long id) { - if (getListAdapter().getItemViewType(position) == ExtendedDownloadAdapterWrapper.TYPE_EXTENDED) + if (getListAdapter().getItemViewType(position) == DownloadAdapter.TYPE_EXTENDED) openDownloadedList(); } @@ -198,12 +194,12 @@ public class DownloadFragment extends BaseMwmListFragment implements View.OnClic setListAdapter(getDownloadedAdapter()); mMode = MODE_NONE; updateToolbar(); - if (mExtendedAdapter != null) - mExtendedAdapter.onPause(); + if (mDownloadAdapter != null) + mDownloadAdapter.onPause(); mDownloadedAdapter.onResume(getListView()); } - private ListAdapter getDownloadedAdapter() + BaseDownloadAdapter getDownloadedAdapter() { if (mDownloadedAdapter == null) { @@ -222,12 +218,12 @@ public class DownloadFragment extends BaseMwmListFragment implements View.OnClic return mDownloadedAdapter; } - private ExtendedDownloadAdapterWrapper getExtendedAdapter() + private DownloadAdapter getDownloadAdapter() { - if (mExtendedAdapter == null) + if (mDownloadAdapter == null) { - mExtendedAdapter = new ExtendedDownloadAdapterWrapper(this, new DownloadAdapter(this)); - mExtendedAdapter.registerDataSetObserver(new DataSetObserver() + mDownloadAdapter = new DownloadAdapter(this); + mDownloadAdapter.registerDataSetObserver(new DataSetObserver() { @Override public void onChanged() @@ -238,7 +234,7 @@ public class DownloadFragment extends BaseMwmListFragment implements View.OnClic }); } - return mExtendedAdapter; + return mDownloadAdapter; } @Override diff --git a/android/src/com/mapswithme/country/DownloadedAdapter.java b/android/src/com/mapswithme/country/DownloadedAdapter.java index 6c77cfac38..417490c50b 100644 --- a/android/src/com/mapswithme/country/DownloadedAdapter.java +++ b/android/src/com/mapswithme/country/DownloadedAdapter.java @@ -4,16 +4,17 @@ import android.util.Log; import android.util.Pair; import android.view.View; import android.view.ViewGroup; +import android.widget.ListView; import com.mapswithme.maps.BuildConfig; import com.mapswithme.maps.R; import com.mapswithme.util.Utils; -public class DownloadedAdapter extends BaseDownloadAdapter implements ActiveCountryTree.ActiveCountryListener +class DownloadedAdapter extends BaseDownloadAdapter implements ActiveCountryTree.ActiveCountryListener { private static final String TAG = DownloadedAdapter.class.getSimpleName(); private static final int TYPE_HEADER = 5; - private static final int VIEW_TYPE_COUNT = 6; + private static final int VIEW_TYPE_COUNT = TYPES_COUNT + 1; /* * Invalid position indicates, that country group(downloaded, new or outdated) and position in that group cannot be determined correctly. @@ -27,7 +28,7 @@ public class DownloadedAdapter extends BaseDownloadAdapter implements ActiveCoun private int mInProgressCount; private int mListenerSlotId; - public DownloadedAdapter(DownloadFragment fragment) + DownloadedAdapter(DownloadFragment fragment) { super(fragment); } @@ -244,6 +245,19 @@ public class DownloadedAdapter extends BaseDownloadAdapter implements ActiveCoun ActiveCountryTree.retryDownloading(groupAndPosition.first, groupAndPosition.second); } + @Override + public void onResume(ListView listView) + { + mListView = listView; + notifyDataSetChanged(); + } + + @Override + public void onPause() + { + mListView = null; + } + @Override protected void setCountryListener() { diff --git a/android/src/com/mapswithme/country/ExtendedDownloadAdapterWrapper.java b/android/src/com/mapswithme/country/ExtendedDownloadAdapterWrapper.java deleted file mode 100644 index eb8338a085..0000000000 --- a/android/src/com/mapswithme/country/ExtendedDownloadAdapterWrapper.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.mapswithme.country; - -import android.database.DataSetObserver; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ListView; -import android.widget.TextView; - -import com.mapswithme.maps.R; - -public class ExtendedDownloadAdapterWrapper extends DownloadAdapter -{ - protected static final int EXTENDED_VIEWS_COUNT = 2; // 3 more views at the top of baseadapter - protected static final int DOWNLOADED_ITEM_POSITION = 0; - protected static final int EXTENDED_VIEW_TYPE_COUNT = 2; // one for placeholder, other for downloader view - protected static final int TYPE_PLACEHOLDER = 5; - protected static final int TYPE_EXTENDED = 6; - - protected BaseDownloadAdapter mWrappedAdapter; - - protected DataSetObserver mObserver = new DataSetObserver() { - @Override - public void onChanged() - { - notifyDataSetChanged(); - } - }; - - public ExtendedDownloadAdapterWrapper(DownloadFragment fragment, BaseDownloadAdapter wrappedAdapter) - { - super(fragment); - mWrappedAdapter = wrappedAdapter; - mWrappedAdapter.registerDataSetObserver(mObserver); - } - - @Override - public boolean isEnabled(int position) - { - if (isRootScreen()) - { - if (position == DOWNLOADED_ITEM_POSITION) - return true; - else if (position < EXTENDED_VIEWS_COUNT) - return false; - } - - return mWrappedAdapter.isEnabled(getPositionInBaseAdapter(position)); - } - - @Override - public int getViewTypeCount() - { - if (isRootScreen()) - return mWrappedAdapter.getViewTypeCount() + EXTENDED_VIEW_TYPE_COUNT; - - return mWrappedAdapter.getViewTypeCount(); - } - - @Override - public int getItemViewType(int position) - { - if (isRootScreen()) - { - if (position == DOWNLOADED_ITEM_POSITION) - return TYPE_EXTENDED; - else if (position < EXTENDED_VIEWS_COUNT) - return TYPE_PLACEHOLDER; - } - - return mWrappedAdapter.getItemViewType(getPositionInBaseAdapter(position)); - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) - { - final int viewType = getItemViewType(position); - ViewHolderExtended holder = new ViewHolderExtended(); - if (viewType == TYPE_PLACEHOLDER) - { - final View view = getPlaceholderView(parent); - holder.initFromView(view); - view.setTag(holder); - return view; - } - else if (viewType == TYPE_EXTENDED) - { - final View view = getExtendedView(parent); - holder.initFromView(view); - final int count = ActiveCountryTree.getOutOfDateCount(); - if (count > 0) - { - holder.tvCount.setVisibility(View.VISIBLE); - holder.tvCount.setText(String.valueOf(count)); - } - else - holder.tvCount.setVisibility(View.GONE); - view.setTag(holder); - return view; - } - - return mWrappedAdapter.getView(getPositionInBaseAdapter(position), convertView, parent); - } - - private int getPositionInBaseAdapter(int position) - { - if (isRootScreen()) - return position - EXTENDED_VIEWS_COUNT; - - return position; - } - - protected View getPlaceholderView(ViewGroup parent) - { - return mInflater.inflate(R.layout.download_item_placeholder, parent, false); - } - - protected View getExtendedView(ViewGroup parent) - { - return mInflater.inflate(R.layout.download_item_extended, parent, false); - } - - @Override - public CountryItem getItem(int position) - { - if (isRootScreen() && position < EXTENDED_VIEWS_COUNT) - return null; - - return mWrappedAdapter.getItem(getPositionInBaseAdapter(position)); - } - - @Override - public int getCount() - { - if (isRootScreen()) - return mWrappedAdapter.getCount() + EXTENDED_VIEWS_COUNT; - - return mWrappedAdapter.getCount(); - } - - @Override - public void onItemClick(int position, View view) - { - mWrappedAdapter.onItemClick(getPositionInBaseAdapter(position), view); - } - - @Override - public boolean onBackPressed() - { - return mWrappedAdapter.onBackPressed(); - } - - protected boolean isRootScreen() - { - return !CountryTree.hasParent(); - } - - @Override - public void onResume(ListView listView) - { - mWrappedAdapter.onResume(listView); - } - - @Override - public void onPause() - { - mWrappedAdapter.onPause(); - } - - protected static class ViewHolderExtended extends ViewHolder - { - public TextView tvCount; - - @Override - void initFromView(View v) - { - super.initFromView(v); - tvCount = (TextView) v.findViewById(R.id.tv__count); - } - } -}