diff --git a/README.md b/README.md
new file mode 100644
index 0000000..ac678a6
--- /dev/null
+++ b/README.md
@@ -0,0 +1,18 @@
+Brain is a app builder in Android Native.
+
+ 1.- Frontend: Java 17 and Kotlin
+ 2.- Backend: Java17, Spring boot.
+ 3.- DB: MySQL and MongoDB
+
+
+Structure proyect
+
+
+
+
+
+
+
+
+Demo Video
+https://youtu.be/vEUClr6Gnfg
diff --git a/app/build.gradle b/app/build.gradle
index 2c126ec..57fa92c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -33,28 +33,32 @@ android {
}
dependencies {
- implementation project(path: ':imageslider')
+ implementation project(path: ':multimediaslider')
+ implementation project(path: ':multimediapuzzlesviewer')
implementation 'com.github.stfalcon-studio:StfalconImageViewer:v1.0.1'
implementation 'com.github.bumptech.glide:glide:4.12.0'
implementation 'com.android.volley:volley:1.2.1'
implementation 'in.srain.cube:grid-view-with-header-footer:1.0.12'
implementation 'de.hdodenhof:circleimageview:3.1.0'
- implementation 'com.google.android.exoplayer:exoplayer:2.19.1'
- implementation 'com.google.android.material:material:1.11.0'
- implementation 'androidx.appcompat:appcompat:1.6.1'
+ implementation 'com.google.android.material:material:1.12.0'
implementation 'com.google.code.gson:gson:2.10.1'
+ implementation 'androidx.media3:media3-exoplayer:1.3.1'
+ implementation 'androidx.media3:media3-exoplayer-dash:1.3.1'
+ implementation 'androidx.media3:media3-ui:1.3.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation "androidx.cardview:cardview:1.0.0"
implementation "androidx.recyclerview:recyclerview:1.3.2"
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
+ implementation 'androidx.core:core-ktx:1.13.1'
implementation "com.squareup.retrofit2:retrofit:2.9.0"
implementation "com.squareup.retrofit2:converter-gson:2.9.0"
implementation 'com.squareup.okhttp3:okhttp:4.9.2'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.2'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
testImplementation 'junit:junit:4.13.2'
- androidTestImplementation 'androidx.test.ext:junit:1.1.5'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
+ androidTestImplementation 'androidx.test.ext:junit:1.2.0'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.0'
}
repositories {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 196a3ef..7cd83ed 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,12 +10,13 @@
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
+ android:label=""
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme.NoActionBar">
diff --git a/app/src/main/java/com/brain/activities/HomeActivity.java b/app/src/main/java/com/brain/activities/HomeActivity.java
index f397ace..72b8bb6 100644
--- a/app/src/main/java/com/brain/activities/HomeActivity.java
+++ b/app/src/main/java/com/brain/activities/HomeActivity.java
@@ -53,7 +53,7 @@ public class HomeActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
- viewPager = (ViewPager) findViewById(R.id.pager);
+ viewPager = findViewById(R.id.pager);
fabTextPosting = findViewById(R.id.fabTextPosting);
fabUploadVideoClip = findViewById(R.id.fabUploadVideoClip);
imageView = findViewById(R.id.imagePost);
@@ -111,27 +111,22 @@ public boolean onCreateOptionsMenu(Menu menu) {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
- switch (id) {
- case R.id.action_search:
- SearchView search = (SearchView) item.getActionView();
- search.setSubmitButtonEnabled(false);
- search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
- @Override
- public boolean onQueryTextSubmit(String query) {
- return false;
- }
-
- @Override
- public boolean onQueryTextChange(String newText) {
- return false;
- }
- });
- break;
- case R.id.action_play_music:
- Toast.makeText(getApplication(), "Play Music >>", Toast.LENGTH_SHORT).show();
- break;
- default:
- break;
+ if (id == R.id.action_search) {
+ SearchView search = (SearchView) item.getActionView();
+ assert search != null;
+ search.setSubmitButtonEnabled(false);
+ search.setQueryHint("Project, author...");
+ search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
+ @Override
+ public boolean onQueryTextSubmit(String query) {
+ return false;
+ }
+
+ @Override
+ public boolean onQueryTextChange(String newText) {
+ return false;
+ }
+ });
}
return super.onOptionsItemSelected(item);
}
@@ -159,7 +154,7 @@ public void onTabSelected(TabLayout.Tab tab) {
tabLayout.setLayoutParams(layoutParams);
break;
case 1:
- fabOptionMenuTouch = (FloatingActionButton) findViewById(R.id.fabOptionMenu);
+ fabOptionMenuTouch = findViewById(R.id.fabOptionMenu);
fabOptionMenuTouch.setVisibility(View.INVISIBLE);
coordinatorLayoutForFAB = findViewById(R.id.coordinatorForFAB);
diff --git a/app/src/main/java/com/brain/adapters/MultimediaAdapter.java b/app/src/main/java/com/brain/adapters/MultimediaAdapter.java
index 66ca41e..b71cbf6 100644
--- a/app/src/main/java/com/brain/adapters/MultimediaAdapter.java
+++ b/app/src/main/java/com/brain/adapters/MultimediaAdapter.java
@@ -1,9 +1,11 @@
package com.brain.adapters;
+import static com.brain.util.Util.AUDIO_MP3;
import static com.brain.util.Util.URL;
import static com.brain.util.Util.URL_PART;
import static com.brain.util.Util.VIDEO_MP4;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
@@ -13,7 +15,10 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
import androidx.annotation.RequiresApi;
+import androidx.media3.common.util.UnstableApi;
+import androidx.media3.ui.PlayerView;
import androidx.recyclerview.widget.RecyclerView;
import com.brain.R;
@@ -23,9 +28,10 @@
import com.brain.model.MediaDetail;
import com.brain.model.Profile;
import com.brain.model.Video;
-import com.brain.service.OnImageSliderClickListener;
+import com.brain.multimediaslider.model.Multimedia;
+import com.brain.service.MediaPlayerService;
import com.brain.service.OnImageViewClickListenerService;
-import com.brain.service.VideoPlayService;
+import com.brain.service.OnMultimediaSliderClickListener;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.load.DataSource;
@@ -33,11 +39,10 @@
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
-import com.denzcoskun.imageslider.constants.ScaleTypes;
-import com.denzcoskun.imageslider.models.SlideModel;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
import java.util.concurrent.atomic.AtomicLong;
public class MultimediaAdapter extends RecyclerView.Adapter {
@@ -50,7 +55,7 @@ public class MultimediaAdapter extends RecyclerView.Adapter slideModelList;
+ protected ArrayList multimediaList;
protected ArrayList