diff --git a/OsmAnd/AndroidManifest.xml b/OsmAnd/AndroidManifest.xml
index b77f8db5b8..10963625a0 100644
--- a/OsmAnd/AndroidManifest.xml
+++ b/OsmAnd/AndroidManifest.xml
@@ -8,7 +8,15 @@
-
+
+
+
+
+
+
+
+
+
@@ -72,15 +80,8 @@
+
+
-
-
-
-
-
-
-
-
-
diff --git a/OsmAnd/res/layout/list_item_bidforfix.xml b/OsmAnd/res/layout/list_item_bidforfix.xml
new file mode 100644
index 0000000000..67eca6da5d
--- /dev/null
+++ b/OsmAnd/res/layout/list_item_bidforfix.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OsmAnd/res/xml/settings_pref.xml b/OsmAnd/res/xml/settings_pref.xml
index 30eb7a3c11..a81fbff5f8 100644
--- a/OsmAnd/res/xml/settings_pref.xml
+++ b/OsmAnd/res/xml/settings_pref.xml
@@ -136,6 +136,9 @@
+
+
+
diff --git a/OsmAnd/src/com/bidforfix/andorid/BidForFixActivity.java b/OsmAnd/src/com/bidforfix/andorid/BidForFixActivity.java
new file mode 100644
index 0000000000..c029214cc5
--- /dev/null
+++ b/OsmAnd/src/com/bidforfix/andorid/BidForFixActivity.java
@@ -0,0 +1,202 @@
+package com.bidforfix.andorid;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+import net.osmand.plus.R;
+import android.app.Activity;
+import android.app.Dialog;
+import android.app.ListActivity;
+import android.app.ProgressDialog;
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+import android.widget.ArrayAdapter;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.bidforfix.andorid.BidForFixHelper.BFFIssue;
+import com.gafmedia.Graph.PieItem;
+import com.gafmedia.Graph.View_PieChart;
+
+public abstract class BidForFixActivity extends ListActivity {
+
+ private static final int LOAD_ITEMS = 0;
+
+ LoadItemsTask loadItemTask;
+
+ private BidForFixHelper helper;
+
+ public abstract BidForFixHelper getBidForFixHelper();
+
+ private BidForFixHelper getHelper() {
+ if (helper == null) {
+ helper = getBidForFixHelper();
+ }
+ return helper;
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ setTheme(android.R.style.Theme_Light);
+ super.onCreate(savedInstanceState);
+ if (getHelper().isReloadNeeded()) {
+ showDialog(LOAD_ITEMS);
+ } else {
+ setListAdapter(new BFFIssueArrayAdapter(this, getHelper().getList()));
+ }
+ }
+
+
+ @Override
+ protected Dialog onCreateDialog(int id) {
+ switch (id) {
+ case LOAD_ITEMS:
+ return new ProgressDialog(this);
+ }
+ return super.onCreateDialog(id);
+ }
+
+ @Override
+ protected void onPrepareDialog(int id, Dialog dialog) {
+ switch (id) {
+ case LOAD_ITEMS:
+ dialog.setTitle("Loading");
+ loadItemTask = new LoadItemsTask((ProgressDialog)dialog);
+ loadItemTask.execute();
+ return;
+ }
+ super.onPrepareDialog(id, dialog);
+ }
+
+ @Override
+ protected void onListItemClick(ListView l, View v, int position, long id) {
+ BFFIssue issue = (BFFIssue) getListAdapter().getItem(position);
+ String url = issue.getLink();
+ try {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse(url));
+ startActivity(i);
+ } catch (ActivityNotFoundException ex) {
+ Toast.makeText(this, ex.getMessage() + " for " + url, Toast.LENGTH_LONG).show();
+ }
+ super.onListItemClick(l, v, position, id);
+ }
+
+ public class LoadItemsTask extends AsyncTask