/** * Copyright(c) 2014 DRAWNZER.ORG PROJECTS -> ANURAG * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * anuraxsharma1512@gmail.com * */ package drawnzer.anurag.kollosal.fragments; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.provider.MediaStore; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.LinearLayout; import android.widget.ListView; import drawnzer.anurag.kollosal.Constant; import drawnzer.anurag.kollosal.R; import drawnzer.anurag.kollosal.SlidingUpPanelLayout; import drawnzer.anurag.kollosal.SlidingUpPanelLayout.PanelSlideListener; import drawnzer.anurag.kollosal.VideoPlayer; import drawnzer.anurag.kollosal.adapters.FolderAdapter; import drawnzer.anurag.kollosal.adapters.VideoAdapter; import drawnzer.anurag.kollosal.models.VideoItem; import drawnzer.anurag.provider.NewAddedVideos; /** * * @author Anurag.... * */ public class VideoFragment extends Fragment implements PanelSlideListener{ //this adapter is set when folder is clicked and child videos are displayed.... private VideoAdapter videoAdapter; //adapter for video folders private static FolderAdapter folderAdapter; //folder items..which also contains child videos.... private ArrayList<VideoItem> list; //list view.... private static ListView grid; //asynctask class to load videos from sdcard from phone in background thread //and update the list view as videos are discovered.... private LoadVideo loadVideo; //umano slider view.... private static SlidingUpPanelLayout slider; //list to keep track of added folders,a folder has to added to list only once and its child //videos will to added to current folder.... private HashMap<String, VideoItem> addedItems; //umano drag view.... private LinearLayout mini_controls; //true then folder is clicked and list view showing videos from folder.... private static boolean folder_expanded; //selected folder or video.... private static VideoItem selected_folder; //selected position for video folder..... private static int selected_video_position; //true then removes the new tag from video after user returns from //video player class after veiwing video.... private boolean update_grid_onResume; //holds the currently played video.... private VideoItem playingVideo; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub View view = inflater.inflate(R.layout.timeline_view, container , false); if(list == null){ addedItems = new HashMap<String , VideoItem>(); list = new ArrayList<VideoItem>(); } if(folderAdapter == null) folderAdapter = new FolderAdapter(getActivity(), list); folder_expanded = false; update_grid_onResume = false; playingVideo = null; //initializing the db handler class to get list of new videos..... if(Constant.NEW_VIDEOS == null) Constant.NEW_VIDEOS = new NewAddedVideos(getActivity()); return view; } @Override public void onViewCreated(View v, Bundle savedInstanceState) { // TODO Auto-generated method stub grid = (ListView)v.findViewById(R.id.video_grid); grid.setSelector(R.drawable.button_click); grid.setAdapter(folderAdapter); //long click action is taken here..... grid.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1,int position, long arg3) { // TODO Auto-generated method stub return true; } }); slider = (SlidingUpPanelLayout)v.findViewById(R.id.sliding_layout_video); mini_controls = (LinearLayout)v.findViewById(R.id.player_mini_controls); slider.setPanelSlideListener(this); //launching the video player.... grid.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position,long arg3) { // TODO Auto-generated method stub /*Intent intent = new Intent(getActivity(), VideoPlayer.class); intent.setData(Uri.parse(list.get(position).getVideoPath())); startActivity(intent);*/ if(folder_expanded){ //the folder is open,now choosing a video file to play.... playingVideo = selected_folder.getChildVideos().get(position); Intent intent = new Intent(getActivity(), VideoPlayer.class); intent.setData(Uri.parse(playingVideo.getVideoPath())); startActivity(intent); selected_video_position = position; //removing the new video tag if the video was never played.... if(playingVideo.isVideoNew()){ Constant.NEW_VIDEOS.addNewVideo(playingVideo.getVideoPath()); } }else{ //opening a folder.... folder_expanded = true; selected_folder = list.get(position); videoAdapter = new VideoAdapter(getActivity(), selected_folder.getChildVideos(), true); grid.setAdapter(videoAdapter); } } }); if(loadVideo == null){ loadVideo = new LoadVideo(); loadVideo.execute(); } } @Override public void onPause() { // TODO Auto-generated method stub super.onPause(); if(playingVideo != null){ if(playingVideo.isVideoNew()){ selected_folder.getChildVideos().get(selected_video_position).removeNewVideoFlag(); update_grid_onResume = true; } } } @Override public void onResume() { // TODO Auto-generated method stub super.onResume(); if(playingVideo != null) if(update_grid_onResume && folder_expanded){ videoAdapter = new VideoAdapter(getActivity(), selected_folder.getChildVideos(), true); grid.setAdapter(videoAdapter); } } /** * * @author Anurag.... * */ private class LoadVideo extends AsyncTask<Void, Void, Void>{ public LoadVideo() { // TODO Auto-generated constructor stub } @Override protected void onProgressUpdate(Void... values) { // TODO Auto-generated method stub super.onProgressUpdate(values); folderAdapter.notifyDataSetChanged(); } @Override protected Void doInBackground(Void... arg0) { // TODO Auto-generated method stub Cursor cursor = getActivity().getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null, null, null, null); while(cursor.moveToNext()){ String path = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA)); //addedItems.put(key, value) File file = new File(path); String parent = file.getParent(); VideoItem itm = addedItems.get(parent); VideoItem itemtoAdd = new VideoItem(file, false); if(itm == null){ VideoItem item = new VideoItem(file , true); list.add(item); addedItems.put(parent, item); } if(Constant.NEW_VIDEOS.isVideoNew(path) == 0) itemtoAdd.setNewVideoFlag(); //adding the current video also.... addedItems.get(parent).addVideo(itemtoAdd); publishProgress(); } cursor.close(); return null; } } /** * changes the background color of umano slider menu.... * @param color */ public static void notifyColorChange(int color){ slider.setBackgroundColor(color); } /** * * @return true if umano menu is opened.... */ public static boolean isSliderOpened(){ return slider.isPanelExpanded(); } /** * collapses the umano slider menu.... */ public static void notifyPanelClose(){ try{ slider.collapsePanel(); }catch(Exception e){ } } /** * * @return true if a folder is opened for viewing videos.... */ public static boolean isFolderExpanded(){ return folder_expanded; } /** * collapses the expanded folder and displays initial folder list.... */ public static void collapseFolder(){ folder_expanded = false; grid.setAdapter(folderAdapter); } @Override public void onPanelSlide(View panel, float slideOffset) { // TODO Auto-generated method stub mini_controls.setVisibility(View.GONE); } @Override public void onPanelCollapsed(View panel) { // TODO Auto-generated method stub mini_controls.setVisibility(View.VISIBLE); } @Override public void onPanelExpanded(View panel) { // TODO Auto-generated method stub } @Override public void onPanelAnchored(View panel) { // TODO Auto-generated method stub } @Override public void onPanelHidden(View panel) { // TODO Auto-generated method stub } /** * this function is called when next button is clicked from video player.... * * @return the next video track to be played from the sequence of opened folder.... */ public static VideoItem getNextVideo(){ VideoItem item = null; if(++selected_video_position < selected_folder.getTotalChildVideos()) item = selected_folder.getChildVideos().get(selected_video_position); else --selected_video_position; return item; } /** * this function is called when previous button is clicked from video player.... * * @return the back video to be played from the opened folder.... */ public static VideoItem getPreviousVideo(){ VideoItem item = null; if(selected_video_position != 0) if(--selected_video_position >= 0) item = selected_folder.getChildVideos().get(selected_video_position); return item; } }