diff --git a/Covid19Shahajjo/app/build.gradle b/Covid19Shahajjo/app/build.gradle index 3381874..d549940 100644 --- a/Covid19Shahajjo/app/build.gradle +++ b/Covid19Shahajjo/app/build.gradle @@ -47,4 +47,6 @@ dependencies { implementation 'com.google.code.gson:gson:2.4' implementation 'com.android.support:multidex:1.0.3' implementation 'com.google.firebase:firebase-analytics:17.2.2' + implementation 'com.pierfrancescosoffritti.androidyoutubeplayer:core:10.0.3' + } diff --git a/Covid19Shahajjo/app/src/main/AndroidManifest.xml b/Covid19Shahajjo/app/src/main/AndroidManifest.xml index be8e1dd..919f0e3 100644 --- a/Covid19Shahajjo/app/src/main/AndroidManifest.xml +++ b/Covid19Shahajjo/app/src/main/AndroidManifest.xml @@ -30,6 +30,17 @@ + + + + + + + diff --git a/Covid19Shahajjo/app/src/main/java/com/example/covid19shahajjo/activities/Covid19StoryActivity.java b/Covid19Shahajjo/app/src/main/java/com/example/covid19shahajjo/activities/Covid19StoryActivity.java new file mode 100644 index 0000000..655f115 --- /dev/null +++ b/Covid19Shahajjo/app/src/main/java/com/example/covid19shahajjo/activities/Covid19StoryActivity.java @@ -0,0 +1,61 @@ +package com.example.covid19shahajjo.activities; + +import android.os.Bundle; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.example.covid19shahajjo.R; +import com.example.covid19shahajjo.models.YouTubeVideos; +import com.example.covid19shahajjo.utils.Enums; +import com.example.covid19shahajjo.utils.SharedStorge; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; + + +public class Covid19StoryActivity extends AppCompatActivity { + + private DatabaseReference databaseReference; + private RecyclerView storyRecyclerView; + private Covid19StoryActivity covid19StoryActivity; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_covid19_story); + covid19StoryActivity=this; + setUserPreferableTitle(); + + + storyRecyclerView = (RecyclerView) findViewById(R.id.recyclerview_video); + storyRecyclerView.setHasFixedSize(true); + storyRecyclerView.setLayoutManager(new LinearLayoutManager(this)); + + databaseReference = FirebaseDatabase.getInstance().getReference("video"); + + YouTubeVideos youTubeVideos=new YouTubeVideos(covid19StoryActivity,null,null); + + + youTubeVideos.getYoutubeVideoData(databaseReference,storyRecyclerView); + + + + } + + @Override + protected void onPause() { + super.onPause(); + } + + private void setUserPreferableTitle(){ + Enums.Language language = SharedStorge.getUserLanguage(this); + if(language == Enums.Language.BD){ + String title = getResources().getString(R.string.covid_story_title_bd); + setTitle(title); + }else{ + setTitle("Covid-19 Story"); + } + } +} diff --git a/Covid19Shahajjo/app/src/main/java/com/example/covid19shahajjo/activities/HomeActivity.java b/Covid19Shahajjo/app/src/main/java/com/example/covid19shahajjo/activities/HomeActivity.java index 6087b39..78b535a 100644 --- a/Covid19Shahajjo/app/src/main/java/com/example/covid19shahajjo/activities/HomeActivity.java +++ b/Covid19Shahajjo/app/src/main/java/com/example/covid19shahajjo/activities/HomeActivity.java @@ -38,6 +38,8 @@ public class HomeActivity extends AppCompatActivity implements AdapterView.OnIte private final int STATISTICS_POSITION = 3; private final int SETTINGS_POSITION = 4; private final int ABOUT_POSITION = 5; + private final int VIDEO_STORY_POSITION = 6; + private PermissionChecker permissionChecker; @@ -117,6 +119,10 @@ else if(position == TEST_CENTER_POSITION){ Intent intent = new Intent(this, TestCenterActivity.class); startActivity(intent); } + else if(position==VIDEO_STORY_POSITION){ + Intent intent = new Intent(this, Covid19StoryActivity.class); + startActivity(intent); + } } private void goPageIfConnected(Class destinationClass){ diff --git a/Covid19Shahajjo/app/src/main/java/com/example/covid19shahajjo/activities/YoutubeFullScreenActivity.java b/Covid19Shahajjo/app/src/main/java/com/example/covid19shahajjo/activities/YoutubeFullScreenActivity.java new file mode 100644 index 0000000..71c6bf8 --- /dev/null +++ b/Covid19Shahajjo/app/src/main/java/com/example/covid19shahajjo/activities/YoutubeFullScreenActivity.java @@ -0,0 +1,53 @@ +package com.example.covid19shahajjo.activities; + +import android.os.Bundle; +import android.view.View; + +import androidx.appcompat.app.AppCompatActivity; + +import com.example.covid19shahajjo.R; +import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.PlayerConstants; +import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer; +import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.AbstractYouTubePlayerListener; +import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.YouTubePlayerView; + +public class YoutubeFullScreenActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_youtube_full_screen); + + YouTubePlayerView youTubePlayerView = findViewById(R.id.youtube_player_view); + getLifecycle().addObserver(youTubePlayerView); + + youTubePlayerView.addYouTubePlayerListener(new AbstractYouTubePlayerListener() { + @Override + public void onReady(YouTubePlayer youTubePlayer) { + super.onReady(youTubePlayer); + String url =getIntent().getExtras().getString("url"); + Float playerCurrentSecondPlayed=getIntent().getExtras().getFloat("playerCurrentSecondPlayed"); + youTubePlayer.loadVideo(url,playerCurrentSecondPlayed); + } + + @Override + public void onStateChange(YouTubePlayer youTubePlayer, PlayerConstants.PlayerState state) { + super.onStateChange(youTubePlayer, state); + + + } + }); + + //full screen listener + youTubePlayerView.getPlayerUiController().setFullScreenButtonClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + + //Destroy activity + finish(); + } + }); + } + +} diff --git a/Covid19Shahajjo/app/src/main/java/com/example/covid19shahajjo/adapters/HomeMenuAdapter.java b/Covid19Shahajjo/app/src/main/java/com/example/covid19shahajjo/adapters/HomeMenuAdapter.java index 755eb84..0fb5317 100644 --- a/Covid19Shahajjo/app/src/main/java/com/example/covid19shahajjo/adapters/HomeMenuAdapter.java +++ b/Covid19Shahajjo/app/src/main/java/com/example/covid19shahajjo/adapters/HomeMenuAdapter.java @@ -66,6 +66,7 @@ private int getDrawable(int position){ case 3: return R.drawable.ic_statistics; case 4: return R.drawable.ic_settings; case 5: return R.drawable.ic_about; + case 6: return R.drawable.ic_video_story; default: return -1; } } diff --git a/Covid19Shahajjo/app/src/main/java/com/example/covid19shahajjo/adapters/VideoAdapter.java b/Covid19Shahajjo/app/src/main/java/com/example/covid19shahajjo/adapters/VideoAdapter.java new file mode 100644 index 0000000..207fcb0 --- /dev/null +++ b/Covid19Shahajjo/app/src/main/java/com/example/covid19shahajjo/adapters/VideoAdapter.java @@ -0,0 +1,159 @@ +package com.example.covid19shahajjo.adapters; + +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.example.covid19shahajjo.R; +import com.example.covid19shahajjo.activities.Covid19StoryActivity; +import com.example.covid19shahajjo.activities.YoutubeFullScreenActivity; +import com.example.covid19shahajjo.models.YouTubeVideos; +import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.PlayerConstants; +import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer; +import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.AbstractYouTubePlayerListener; +import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.YouTubePlayerView; + +import java.util.ArrayList; +import java.util.List; + +public class VideoAdapter extends RecyclerView.Adapter { + + private Covid19StoryActivity covid19StoryActivity; + private ArrayList youTubePlayerArrayList = new ArrayList<>(); + private RecyclerView storyRecyclerView; + private boolean isPlaying=false; + private float playerCurrentSecondPlayed=0; + ListyouTubeVideosList; + + + public VideoAdapter(List youTubeVideosList, Covid19StoryActivity covid19StoryActivity, RecyclerView storyRecyclerView) { + this.youTubeVideosList = youTubeVideosList; + this.covid19StoryActivity=covid19StoryActivity; + this.storyRecyclerView=storyRecyclerView; + } + + @NonNull + @Override + public VideoViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.video_view,parent,false); + + return new VideoViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull VideoViewHolder holder, int position) { + + holder.tileTextView.setText(youTubeVideosList.get(position).getTitle()); + + + //full screen youtube player listener + holder.youTubePlayerView.getPlayerUiController().setFullScreenButtonClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + Intent myIntent = new Intent(covid19StoryActivity, YoutubeFullScreenActivity.class); + myIntent.putExtra("url", youTubeVideosList.get(position).getUrl()); //Optional parameters + myIntent.putExtra("playerCurrentSecondPlayed", playerCurrentSecondPlayed); //Optional parameters + covid19StoryActivity.startActivity(myIntent); + } + }); + + + holder.youTubePlayerView.addYouTubePlayerListener(new AbstractYouTubePlayerListener(){ + + + @Override + public void onReady(YouTubePlayer youTubePlayer) { + + covid19StoryActivity.getLifecycle().addObserver(holder.youTubePlayerView); + youTubePlayer.cueVideo(youTubeVideosList.get(position).getUrl(),0); + youTubePlayerArrayList.add(youTubePlayer); + + + //scrolling listener + storyRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { + super.onScrollStateChanged(recyclerView, newState); + + } + + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + super.onScrolled(recyclerView, dx, dy); + if(isPlaying==true) pauseAllPlayer(); + isPlaying=false; + + + } + }); + + + } + + + + @Override + public void onStateChange(YouTubePlayer youTubePlayer, PlayerConstants.PlayerState state) { + + + if(state.toString().equals("PLAYING") || state.toString().equals("BUFFERING") || state.toString().equals("UNKNOWN")){ + if(isPlaying==true){ + pauseAllPlayer(); + youTubePlayer.play(); + } + isPlaying=true; + + }else isPlaying=false;//ENDED,PAUSED,VIDEO_CUED,UNSTARTED + } + + @Override + public void onCurrentSecond(YouTubePlayer youTubePlayer, float second) { + super.onCurrentSecond(youTubePlayer, second); + playerCurrentSecondPlayed=second; + } + }); + + + } + + + + @Override + public int getItemCount() { + return youTubeVideosList.size(); + } + + private void pauseAllPlayer(){ + for(int i=0;iyouTubeVideos=new Vector<>(); + + String title; + String url; + private Covid19StoryActivity covid19StoryActivity; + + public YouTubeVideos() { + } + + public YouTubeVideos(String title, String url) { + this.title=title; + this.url=url; + + + } + + public YouTubeVideos(Covid19StoryActivity covid19StoryActivity, String title, String url) { + this.title=title; + this.url=url; + this.covid19StoryActivity=covid19StoryActivity; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + + public void addYoutubeVideoData(DatabaseReference databaseReference,String title,String url){ + + String key1="title"; + String key2="url"; + + String id= databaseReference.push().getKey(); + + Map map =new HashMap<>(); + map.put(key1,title); + map.put(key2,url); + + databaseReference.child(id).setValue(map); + + } + + public void getYoutubeVideoData(DatabaseReference databaseReference, RecyclerView storyRecyclerView){ + + + databaseReference.addValueEventListener(new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + + youTubeVideos.clear(); + + for(DataSnapshot youtubeVideo : dataSnapshot.getChildren()){ + YouTubeVideos tempdata =youtubeVideo.getValue(YouTubeVideos.class); + + youTubeVideos.add(new YouTubeVideos(tempdata.getTitle(),tempdata.getUrl())); + + } + //set to recycler adapter + VideoAdapter videoAdapter = new VideoAdapter(youTubeVideos,covid19StoryActivity,storyRecyclerView); + storyRecyclerView.setAdapter(videoAdapter); + + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + + } + }); + } + + public void deleteYoutubeVideoData(DatabaseReference databaseReference,String title){ + + String key1="title"; + + Query deleteQuery = databaseReference.orderByChild(key1).equalTo(title); + + deleteQuery.addListenerForSingleValueEvent(new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + + for (DataSnapshot deleteData: dataSnapshot.getChildren()) { + deleteData.getRef().removeValue(); + } + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + + } + }); + } + + public void updateYoutubeVideoData(DatabaseReference databaseReference,String presentTitle,String updateTitle,String updateUrl){ + + String key1="title"; + String key2="url"; + + + Map map =new HashMap<>(); + map.put(key1,updateTitle); + map.put(key2,updateUrl); + + Query deleteQuery = databaseReference.orderByChild(key1).equalTo(presentTitle); + + deleteQuery.addListenerForSingleValueEvent(new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + + for (DataSnapshot updateData: dataSnapshot.getChildren()) { + updateData.getRef().setValue(map); + } + + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + + } + }); + } + + public void updateYoutubeVideoTitleData(DatabaseReference databaseReference,String presentTitle,String updateTitle){ + + String key1="title"; + String key2="url"; + + + + + + Query deleteQuery = databaseReference.orderByChild(key1).equalTo(presentTitle); + + deleteQuery.addListenerForSingleValueEvent(new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + + for (DataSnapshot updateData: dataSnapshot.getChildren()) { + updateData.getRef().child(key1).setValue(updateTitle); + // mDatabaseRef.child("TABLE_NAME").child("orderStatus").setValue(2); + } + + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + + } + }); + } + + public void updateYoutubeVideoUrlData(DatabaseReference databaseReference,String presentTitle,String updateUrl){ + + String key1="title"; + String key2="url"; + + + + + + Query deleteQuery = databaseReference.orderByChild(key1).equalTo(presentTitle); + + deleteQuery.addListenerForSingleValueEvent(new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + + for (DataSnapshot updateData: dataSnapshot.getChildren()) { + updateData.getRef().child(key2).setValue(updateUrl); + } + + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + + } + }); + } + + +} diff --git a/Covid19Shahajjo/app/src/main/res/drawable/ic_video_story.xml b/Covid19Shahajjo/app/src/main/res/drawable/ic_video_story.xml new file mode 100644 index 0000000..fe451a7 --- /dev/null +++ b/Covid19Shahajjo/app/src/main/res/drawable/ic_video_story.xml @@ -0,0 +1,5 @@ + + + diff --git a/Covid19Shahajjo/app/src/main/res/layout/activity_covid19_story.xml b/Covid19Shahajjo/app/src/main/res/layout/activity_covid19_story.xml new file mode 100644 index 0000000..acf86ec --- /dev/null +++ b/Covid19Shahajjo/app/src/main/res/layout/activity_covid19_story.xml @@ -0,0 +1,18 @@ + + + + + + + + \ No newline at end of file diff --git a/Covid19Shahajjo/app/src/main/res/layout/activity_youtube_full_screen.xml b/Covid19Shahajjo/app/src/main/res/layout/activity_youtube_full_screen.xml new file mode 100644 index 0000000..91afd61 --- /dev/null +++ b/Covid19Shahajjo/app/src/main/res/layout/activity_youtube_full_screen.xml @@ -0,0 +1,18 @@ + + + + + + + \ No newline at end of file diff --git a/Covid19Shahajjo/app/src/main/res/layout/styles.xml b/Covid19Shahajjo/app/src/main/res/layout/styles.xml new file mode 100644 index 0000000..7f4f6b7 --- /dev/null +++ b/Covid19Shahajjo/app/src/main/res/layout/styles.xml @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/Covid19Shahajjo/app/src/main/res/layout/video_view.xml b/Covid19Shahajjo/app/src/main/res/layout/video_view.xml new file mode 100644 index 0000000..1eca8f6 --- /dev/null +++ b/Covid19Shahajjo/app/src/main/res/layout/video_view.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Covid19Shahajjo/app/src/main/res/values/strings.xml b/Covid19Shahajjo/app/src/main/res/values/strings.xml index 398de92..71a328b 100644 --- a/Covid19Shahajjo/app/src/main/res/values/strings.xml +++ b/Covid19Shahajjo/app/src/main/res/values/strings.xml @@ -12,6 +12,8 @@ পরিসংখ্যান নিকটস্থ হাসপাতাল নিকটস্থ সাহায্য নাম্বার + ভিডিও সতর্কবার্তা + Nearest Contact Support Nearest COVID-19 Hospitals @@ -19,6 +21,7 @@ COVID-19 Statistics Settings About + COVID-19 Story নিকটস্থ সাহায্য নাম্বার @@ -27,6 +30,7 @@ COVID-19 পরিসংখ্যান সেটিংস শর্তাবলী + ভিডিও সতর্কবার্তা diff --git a/Covid19Shahajjo/app/src/main/res/values/styles.xml b/Covid19Shahajjo/app/src/main/res/values/styles.xml index 5885930..07cdd8e 100644 --- a/Covid19Shahajjo/app/src/main/res/values/styles.xml +++ b/Covid19Shahajjo/app/src/main/res/values/styles.xml @@ -8,4 +8,12 @@ @color/colorAccent + + + diff --git a/README.md b/README.md index f4166b5..da6cbf3 100644 --- a/README.md +++ b/README.md @@ -31,9 +31,10 @@ We developed this application to provide some emergency contacts and information * **Support Bengali and English** - - +* **Covid-19 Story** + + diff --git a/images/1.png b/images/1.png new file mode 100755 index 0000000..c47ed5a Binary files /dev/null and b/images/1.png differ diff --git a/images/8.png b/images/8.png new file mode 100755 index 0000000..19a2708 Binary files /dev/null and b/images/8.png differ