diff --git a/app/build.gradle b/app/build.gradle index 8d054f1..c7717e5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,8 +21,8 @@ android { applicationId "ru.plumsoftware.notebook" minSdk 22 targetSdk 35 - versionCode 31 - versionName "2.0.8" + versionCode 33 + versionName "2.0.10" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -55,13 +55,13 @@ dependencies { //Autogenerate implementation 'androidx.appcompat:appcompat:1.7.0' implementation 'com.google.android.material:material:1.12.0' - implementation 'androidx.constraintlayout:constraintlayout:2.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.2.1' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.2.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' //Yandex ads - implementation 'com.yandex.android:mobileads:7.9.0' + implementation 'com.yandex.android:mobileads:7.11.0' //Glide implementation 'com.github.bumptech.glide:glide:4.15.1' @@ -70,7 +70,7 @@ dependencies { implementation 'com.google.firebase:firebase-messaging:24.1.0' //Analytics - implementation 'com.google.firebase:firebase-analytics:22.2.0' + implementation 'com.google.firebase:firebase-analytics:22.3.0' //Modules implementation project(':app-domain') diff --git a/app/src/main/java/ru/plumsoftware/notebook/presentation/activities/main/presenter/MainPresenterImpl.java b/app/src/main/java/ru/plumsoftware/notebook/presentation/activities/main/presenter/MainPresenterImpl.java index 8a52e3f..3ecbd71 100644 --- a/app/src/main/java/ru/plumsoftware/notebook/presentation/activities/main/presenter/MainPresenterImpl.java +++ b/app/src/main/java/ru/plumsoftware/notebook/presentation/activities/main/presenter/MainPresenterImpl.java @@ -53,12 +53,15 @@ public class MainPresenterImpl implements MainPresenter { private List notes; private final List filteredNotes; + private ProgressDialog progressDialog; + public MainPresenterImpl(Context context, @NonNull Activity activity, MainView mainView) { this.context = context; this.activity = activity; this.mainView = mainView; filteredNotes = new ArrayList<>(); notes = new ArrayList<>(); + progressDialog = new ProgressDialog(activity, R.style.CustomProgressDialog); } @Override @@ -87,93 +90,116 @@ public void initMobileSdk() { }); } + private void showProgressDialog() { + progressDialog.showDialog(); + } + + private void dismissProgressDialog() { + progressDialog.dismiss(); + } + @Override public void initNotes(Conditions conditions) { - mainView.showProgressDialog(); - if (conditions instanceof Conditions.Search) { - filteredNotes.clear(); - String query = ((Conditions.Search) conditions).getQuery(); - - for (Note note : notes) { - if (note.getNoteName().contains(query) || - note.getNoteText().contains(query) || - new SimpleDateFormat("dd.MM.yyyy HH.mm", Locale.getDefault()).format(new Date(note.getAddNoteTime())).contains(query) - ) { - filteredNotes.add(note); + new Thread(() -> { + if (conditions instanceof Conditions.Search) { + filteredNotes.clear(); + String query = ((Conditions.Search) conditions).getQuery(); + + for (Note note : notes) { + if (note.getNoteName().contains(query) || + note.getNoteText().contains(query) || + new SimpleDateFormat("dd.MM.yyyy HH.mm", Locale.getDefault()).format(new Date(note.getAddNoteTime())).contains(query) + ) { + filteredNotes.add(note); + } + } + RecyclerView.LayoutManager layoutManager; + if (isList) { + layoutManager = new LinearLayoutManager(context); + } else { + layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); } + + mainView.initRecyclerView(filteredNotes, layoutManager); } - RecyclerView.LayoutManager layoutManager; - if (isList) { - layoutManager = new LinearLayoutManager(context); - } else { - layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); + else if (conditions instanceof Conditions.All) { + notes.clear(); + SQLiteDatabaseManager sqLiteDatabaseManager = new SQLiteDatabaseManager(context); + sqLiteDatabaseNotes = sqLiteDatabaseManager.getWritableDatabase(); + notes = loadNotes(); + + isList = true; + + activity.runOnUiThread(() -> { + mainView.changeFilterButtonImage(R.drawable.ic_baseline_filter_list); + mainView.initRecyclerView(notes, new LinearLayoutManager(context)); + }); } - - mainView.initRecyclerView(filteredNotes, layoutManager); - } else if (conditions instanceof Conditions.All) { - notes.clear(); - SQLiteDatabaseManager sqLiteDatabaseManager = new SQLiteDatabaseManager(context); - sqLiteDatabaseNotes = sqLiteDatabaseManager.getWritableDatabase(); - notes = loadNotes(); - - isList = true; - mainView.changeFilterButtonImage(R.drawable.ic_baseline_filter_list); - mainView.initRecyclerView(notes, new LinearLayoutManager(context)); - } - mainView.dismissProgressDialog(); + }).start(); } @Override public void initOpenAds() { - mainView.showProgressDialog(); + activity.runOnUiThread(this::showProgressDialog); final AppOpenAdLoader appOpenAdLoader = new AppOpenAdLoader(context); final AdRequestConfiguration adRequestConfiguration = new AdRequestConfiguration.Builder(AdsIds.OPEN_AD_UNIT_ID).build(); AppOpenAdEventListener appOpenAdEventListener = new AppOpenAdEventListener() { @Override public void onAdShown() { - mainView.dismissProgressDialog(); + activity.runOnUiThread(() -> dismissProgressDialog()); } @Override public void onAdFailedToShow(@NonNull final AdError adError) { - mainView.dismissProgressDialog(); + activity.runOnUiThread(() -> dismissProgressDialog()); } @Override public void onAdDismissed() { clearAppOpenAd(); + activity.runOnUiThread(() -> dismissProgressDialog()); } @Override public void onAdClicked() { - // Called when a click is recorded for an ad. + activity.runOnUiThread(() -> dismissProgressDialog()); } @Override public void onAdImpression(@Nullable final ImpressionData impressionData) { - // Called when an impression is recorded for an ad. + activity.runOnUiThread(() -> dismissProgressDialog()); } }; AppOpenAdLoadListener appOpenAdLoadListener = new AppOpenAdLoadListener() { @Override public void onAdLoaded(@NonNull final AppOpenAd appOpenAd) { + dismissProgressDialog(); mainAppOpenAd = appOpenAd; - appOpenAd.setAdEventListener(appOpenAdEventListener); - mainView.dismissProgressDialog(); - mainAppOpenAd.show(activity); + activity.runOnUiThread(() -> { + mainAppOpenAd.setAdEventListener(appOpenAdEventListener); + mainAppOpenAd.show(activity); + }); } @Override public void onAdFailedToLoad(@NonNull final AdRequestError adRequestError) { - mainView.dismissProgressDialog(); + activity.runOnUiThread(() -> dismissProgressDialog()); } }; appOpenAdLoader.setAdLoadListener(appOpenAdLoadListener); appOpenAdLoader.loadAd(adRequestConfiguration); - mainView.dismissProgressDialog(); + + new Thread(() -> { + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + activity.runOnUiThread(this::dismissProgressDialog); + }); } @NonNull diff --git a/app/src/main/java/ru/plumsoftware/notebook/presentation/activities/main/view/MainActivity.java b/app/src/main/java/ru/plumsoftware/notebook/presentation/activities/main/view/MainActivity.java index 60728b1..9520e46 100644 --- a/app/src/main/java/ru/plumsoftware/notebook/presentation/activities/main/view/MainActivity.java +++ b/app/src/main/java/ru/plumsoftware/notebook/presentation/activities/main/view/MainActivity.java @@ -19,7 +19,6 @@ import ru.plumsoftware.notebook.presentation.activities.main.presenter.MainPresenterImpl; import ru.plumsoftware.notebook.presentation.adapters.NoteAdapter; import ru.plumsoftware.notebook.presentation.activities.main.presenter.MainPresenter; -import ru.plumsoftware.notebook.presentation.dialogs.ProgressDialog; public class MainActivity extends AppCompatActivity implements MainView { @@ -31,8 +30,6 @@ public class MainActivity extends AppCompatActivity implements MainView { private ImageView filterAsList; private RecyclerView recyclerViewNotes; - private ProgressDialog progressDialog; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -49,10 +46,6 @@ protected void onCreate(Bundle savedInstanceState) { filterAsList = findViewById(R.id.filterAsList); recyclerViewNotes = activity.findViewById(R.id.recyclerViewNotes); ImageButton addNote = findViewById(R.id.addNote); - progressDialog = new ProgressDialog(context, R.style.CustomProgressDialog); - -// load ad - presenter.initOpenAds(); // Clickers filterAsList.setOnClickListener(view -> presenter.changeListStyle()); @@ -72,6 +65,13 @@ public boolean onQueryTextChange(String s) { return false; } }); + +// load ad + presenter.initMobileSdk(); + presenter.initOpenAds(); + +// Load notes + presenter.initNotes(new Conditions.All()); } @Override @@ -94,22 +94,4 @@ public void initRecyclerView(List notes, RecyclerView.LayoutManager layout recyclerViewNotes.setAdapter(noteAdapter); recyclerViewNotes.setVisibility(View.VISIBLE); } - - @Override - public void showProgressDialog() { - progressDialog.showDialog(); - } - - @Override - public void dismissProgressDialog() { - progressDialog.dismiss(); - } - - @Override - protected void onResume() { - super.onResume(); - - presenter.initNotes(new Conditions.All()); - presenter.initMobileSdk(); - } } \ No newline at end of file diff --git a/app/src/main/java/ru/plumsoftware/notebook/presentation/activities/main/view/MainView.java b/app/src/main/java/ru/plumsoftware/notebook/presentation/activities/main/view/MainView.java index a04e42e..050c367 100644 --- a/app/src/main/java/ru/plumsoftware/notebook/presentation/activities/main/view/MainView.java +++ b/app/src/main/java/ru/plumsoftware/notebook/presentation/activities/main/view/MainView.java @@ -10,7 +10,4 @@ public interface MainView { void changeFilterButtonImage(@DrawableRes int res); void initRecyclerView(List notes, RecyclerView.LayoutManager layoutManager); - - void showProgressDialog(); - void dismissProgressDialog(); } diff --git a/app/src/main/java/ru/plumsoftware/notebook/presentation/dialogs/ProgressDialog.java b/app/src/main/java/ru/plumsoftware/notebook/presentation/dialogs/ProgressDialog.java index d86cdf3..12c9b97 100644 --- a/app/src/main/java/ru/plumsoftware/notebook/presentation/dialogs/ProgressDialog.java +++ b/app/src/main/java/ru/plumsoftware/notebook/presentation/dialogs/ProgressDialog.java @@ -1,8 +1,11 @@ package ru.plumsoftware.notebook.presentation.dialogs; import android.annotation.SuppressLint; +import android.app.Activity; import android.app.Dialog; import android.content.Context; +import android.os.Handler; +import android.os.Looper; import android.view.LayoutInflater; import android.view.View; import android.view.Window; @@ -13,6 +16,7 @@ public class ProgressDialog { private Dialog dialog; private Context context; private int theme; + private final Handler mainThreadHandler = new Handler(Looper.getMainLooper()); public ProgressDialog(Context context) { this.context = context; @@ -24,20 +28,46 @@ public ProgressDialog(Context context, int theme) { } public void showDialog() { - try { - @SuppressLint("InflateParams") View view = LayoutInflater.from(context).inflate(R.layout.progress_dialog, null, false); + if (context instanceof Activity) { + Activity activity = (Activity) context; + if (activity.isFinishing() || activity.isDestroyed()) { + + return; + } + } + + mainThreadHandler.post(() -> { + @SuppressLint("InflateParams") View view = LayoutInflater.from(context).inflate(R.layout.progress_dialog,null, true); dialog = new Dialog(context, theme); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setCancelable(false); dialog.setContentView(view); - dialog.show(); - } catch (Exception e) { - e.printStackTrace(); - } + try { + dialog.show(); + } catch (Exception e) { + e.printStackTrace(); + } + }); } public void dismiss() { - if (dialog != null) - dialog.dismiss(); + if (context instanceof Activity) { + Activity activity = (Activity) context; + if (activity.isFinishing() || activity.isDestroyed()) { + return; + } + } + + mainThreadHandler.post(() -> { + if (dialog != null && dialog.isShowing()) { + try { + dialog.dismiss(); + } catch (final IllegalArgumentException e) { + e.printStackTrace(); + } catch (final Exception e) { + e.printStackTrace(); + } + } + }); } }