package in.co.praveenkumar.mdroid.activity; import in.co.praveenkumar.R; import in.co.praveenkumar.mdroid.helper.ApplicationClass; import in.co.praveenkumar.mdroid.helper.GsonExclude; import in.co.praveenkumar.mdroid.helper.Param; import in.co.praveenkumar.mdroid.model.MDroidFeature; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import android.annotation.SuppressLint; import android.content.Context; import android.content.res.AssetManager; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; public class DonationActivity extends BaseNavigationActivity { private final String DEBUG_TAG = "DonationActivity"; List<MDroidFeature> features = new ArrayList<>(); Context context; FeatureListAdapter featureListAdapter; @SuppressLint("InflateParams") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_donations); setUpDrawer(); // Send a tracker ((ApplicationClass) getApplication()) .sendScreen(Param.GA_SCREEN_DONATION); setTitle("Request features"); this.context = this; // Get features from local db to start with // features = MDroidModelFeature.listAll(MDroidModelFeature.class); // if (features.size() == 0) parseFeaturesFromAssetFile(); ListView featureList = (ListView) findViewById(R.id.list_donations); // Added header and footers to the list LayoutInflater inflater = this.getLayoutInflater(); LinearLayout listHeaderView = (LinearLayout) inflater.inflate( R.layout.list_header_donations, null); featureList.addHeaderView(listHeaderView); // Set the list adapter featureListAdapter = new FeatureListAdapter(this); featureList.setAdapter(featureListAdapter); // Setup listitem clicklisteners featureList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { position--; // Because there is a header if (position < 0) return; startPurchase(features.get(position).getProductid()); // Send a tracker event ((ApplicationClass) getApplication()).sendEvent( Param.GA_EVENT_CAT_DONATION, Param.GA_EVENT_DONATION_BUTTON); } }); } private void startPurchase(String product) { billing.purchase(this, product); } public class FeatureListAdapter extends BaseAdapter { private final Context context; public FeatureListAdapter(Context context) { this.context = context; } @Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.list_item_feature, parent, false); viewHolder.featureimage = (ImageView) convertView .findViewById(R.id.feature_image); viewHolder.featurename = (TextView) convertView .findViewById(R.id.feature_name); viewHolder.featurevoteslayout = (LinearLayout) convertView .findViewById(R.id.feature_votes_layout); viewHolder.featurevotestarget = (TextView) convertView .findViewById(R.id.feature_votestarget); viewHolder.featurevotescasted = (TextView) convertView .findViewById(R.id.feature_votescasted); viewHolder.featuredescription = (TextView) convertView .findViewById(R.id.feature_description); // Save the holder with the view convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } // Assign values viewHolder.featurename.setText(features.get(position).getName()); viewHolder.featurevotestarget.setText(features.get(position) .getVotestarget() + ""); viewHolder.featurevotescasted.setText(features.get(position) .getVotescasted() + ""); viewHolder.featuredescription.setText(features.get(position) .getDescription()); // Feature image switch (features.get(position).getStatus()) { case MDroidFeature.IMPLEMENTED: viewHolder.featureimage .setImageResource(R.drawable.icon_done_green); break; case MDroidFeature.NOT_IMPLEMENTED: viewHolder.featureimage .setImageResource(R.drawable.icon_plusone_red); break; case MDroidFeature.PARTIALLY_IMPLEMENTED: viewHolder.featureimage .setImageResource(R.drawable.icon_plusone_yellow); break; } return convertView; } @Override public int getCount() { return features.size(); } @Override public Object getItem(int position) { return features.get(position); } @Override public long getItemId(int position) { return position; } } static class ViewHolder { ImageView featureimage; TextView featurename; LinearLayout featurevoteslayout; TextView featurevotestarget; TextView featurevotescasted; TextView featuredescription; } private void parseFeaturesFromAssetFile() { Log.d(DEBUG_TAG, "Reading from assets"); AssetManager assetManager = this.getAssets(); try { InputStreamReader reader = new InputStreamReader( assetManager.open("features.json")); GsonExclude ex = new GsonExclude(); Gson gson = new GsonBuilder() .addDeserializationExclusionStrategy(ex) .addSerializationExclusionStrategy(ex).create(); features = gson.fromJson(reader, new TypeToken<List<MDroidFeature>>() { }.getType()); reader.close(); } catch (Exception e) { e.printStackTrace(); } // for (int i = 0; i < features.size(); i++) // features.get(i).save(); } }