package jaangari.opensoft.iitkgp.jaankari; import android.app.ActionBar; import android.app.Activity; import android.app.AlertDialog; import android.app.Fragment; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.text.Layout; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RatingBar; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import java.io.File; import java.util.List; import jaangari.opensoft.iitkgp.jaangari.R; import jaangari.opensoft.iitkgp.jaankari.util.AppLog; import jaangari.opensoft.iitkgp.jaankari.util.Videos; /** * Created by rahulanishetty on 1/27/15. */ public class FragmentVideo extends Fragment { String[] values; Bitmap[] imageId; float[] rating; List<Videos> videos; private boolean video_set = false; private int video_id; private int video_history; private int position; private float rating_user; private View parentLayout; DatabaseHandler db; private String TAG = "FragmentVideo"; public void setPosition(int position) { this.position = position; } private class CustomList extends ArrayAdapter<String> { private final Activity context; private final String[] web; private final Bitmap[] imageId; private final float[] rating; public CustomList(Activity context, String[] web, Bitmap[] imageId, float[] rating) { super(context, R.layout.custom_list_view, web); this.context = context; this.web = web; this.imageId = imageId; this.rating = rating; } @Override public View getView(int position, View view, ViewGroup parent) { LayoutInflater inflater = context.getLayoutInflater(); View rowView = inflater.inflate(R.layout.custom_list_view, null, true); TextView txtTitle = (TextView) rowView.findViewById(R.id.list_text_view); RatingBar ratingBar = (RatingBar) rowView.findViewById(R.id.rating_bar); ImageView imageView = (ImageView) rowView.findViewById(R.id.list_image_view); txtTitle.setText(web[position]); imageView.setImageBitmap(imageId[position]); ratingBar.setRating((float) (rating[position])); return rowView; } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { parentLayout = inflater.inflate(R.layout.fragment_video, container, false); db = new DatabaseHandler(this.getActivity().getApplicationContext()); ListView listview = (ListView) parentLayout.findViewById(R.id.videos_list_view); videos = db.getAllVideosbyCategory(position); db.closeDB(); if(videos.size()!=0) { values = new String[videos.size()]; imageId = new Bitmap[videos.size()]; rating = new float[videos.size()]; for (int i = 0; i < videos.size(); i++) { values[i] = videos.get(i).getName(); String path = videos.get(i).getPath(); rating[i] = videos.get(i).getRating(); imageId[i] = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + "/" + getString(R.string.app_name) + "/Videos/" + path.substring(path.lastIndexOf("/") + 1, path.lastIndexOf(".mp4")) + "_thumbnail.jpg"); } CustomList adapter = new CustomList(this.getActivity(), values, imageId, rating); listview.setAdapter(adapter); listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(); intent.setAction(android.content.Intent.ACTION_VIEW); String path = videos.get(position).getPath(); File file = new File(Environment.getExternalStorageDirectory() + "/" + getString(R.string.app_name) + "/Videos/" + path.substring(path.lastIndexOf("/"))); Log.e(TAG, Environment.getExternalStorageDirectory() + getString(R.string.app_name) + "/Videos/" + path.substring(path.lastIndexOf("/"))); intent.setDataAndType(Uri.fromFile(file), "video/*"); if (videos.get(position).getIsRated() == 0) { video_set = true; } video_id = videos.get(position).getID(); video_history = videos.get(position).getHistory(); startActivity(intent); } }); } else{ TextView textView = (TextView)parentLayout.findViewById(R.id.fragment_video_text_view); textView.setText("Sorry! No videos at present, please try again later!"); } return parentLayout; } @Override public void onAttach(Activity activity) { super.onAttach(activity); ((VideoActivity) activity).onSectionAttached(position + 1); } @Override public void onResume() { if (video_set) { video_set = false; LinearLayout llRating = new LinearLayout(this.getActivity()); llRating.setGravity(Gravity.CENTER); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); AlertDialog.Builder builder = new AlertDialog.Builder(parentLayout.getContext(), AlertDialog.THEME_DEVICE_DEFAULT_DARK); RatingBar ratingBar = new RatingBar(this.getActivity().getApplicationContext()); ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { @Override public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { rating_user = rating; Log.e(TAG, "Rating : " + rating_user); } }); ratingBar.setRating(0); ratingBar.setStepSize(0.1f); ratingBar.setNumStars(5); ratingBar.setLayoutParams(params); builder.setTitle("Rate Video"); llRating.addView(ratingBar); builder.setView(llRating); builder.setPositiveButton("Submit", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Log.e(TAG, "done" + which); updateDb(rating_user); } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { rating_user = -1; updateDb(rating_user); } }); builder.show(); } Log.e("DEBUG", "onResume of VideoFragment"); super.onResume(); } public void updateDb(float rating) { db = new DatabaseHandler(this.getActivity().getApplicationContext()); video_history++; //video_id if(rating!=-1){ db.updateRated(video_id); } else{ new AppLog().appendLog(this.getActivity().getApplicationContext(),video_id+","+"Video"+","+rating); } db.updateVideoHistory(video_id,video_history); db.closeDB(); } }