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 + +![image](https://github.com/user-attachments/assets/1663ba97-3d79-493b-8c4e-69cc9a9d53b4) + +![image](https://github.com/user-attachments/assets/1a2022c6-d397-40eb-871e-1e305f6701cf) + +![image](https://github.com/user-attachments/assets/6f13cda5-17db-4509-a569-de9145b92539) + + +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