Skip to content

Commit 264752a

Browse files
committed
Паттерн
[+] Переписал Main экран с использованием паттерна MVP.
1 parent 5e3d376 commit 264752a

File tree

7 files changed

+180
-411
lines changed

7 files changed

+180
-411
lines changed

app/src/main/java/ru/plumsoftware/notebook/manager/extra/ExtraNames.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ public static class LocalNotificationExtra {
1111

1212
public static class MainActivity {
1313
public static String isLoadAppOpenAd = "isLoadAppOpenAd";
14+
public static String LoadInterstitialAd = "LoadInterstitialAd";
1415
}
1516
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package ru.plumsoftware.notebook.presentation.activities.main.presenter;
2+
3+
public abstract class Conditions {
4+
public static class All extends Conditions {}
5+
public static class Search extends Conditions {
6+
private final String query;
7+
public Search(String str){
8+
this.query = str;
9+
}
10+
11+
public String getQuery() {
12+
return query;
13+
}
14+
}
15+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package ru.plumsoftware.notebook.presentation.activities.main.presenter;
2+
3+
public interface MainPresenter {
4+
void initMobileSdk();
5+
void initNotes(Conditions conditions);
6+
void initOpenAds();
7+
8+
void changeListStyle();
9+
void openAddNoteActivity();
10+
}

app/src/main/java/ru/plumsoftware/notebook/presentation/activities/main/presenter/MainPresenterImpl.java

Lines changed: 124 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@
33
import android.annotation.SuppressLint;
44
import android.app.Activity;
55
import android.content.Context;
6+
import android.content.Intent;
67
import android.database.Cursor;
78
import android.database.sqlite.SQLiteDatabase;
89

910
import androidx.annotation.NonNull;
1011
import androidx.annotation.Nullable;
12+
import androidx.recyclerview.widget.LinearLayoutManager;
13+
import androidx.recyclerview.widget.RecyclerView;
14+
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
1115

1216
import com.yandex.mobile.ads.appopenad.AppOpenAd;
1317
import com.yandex.mobile.ads.appopenad.AppOpenAdEventListener;
@@ -19,106 +23,163 @@
1923
import com.yandex.mobile.ads.common.ImpressionData;
2024
import com.yandex.mobile.ads.common.MobileAds;
2125

26+
import java.text.SimpleDateFormat;
2227
import java.util.ArrayList;
28+
import java.util.Date;
2329
import java.util.List;
30+
import java.util.Locale;
2431

2532
import ru.plumsoftware.data.database.SQLiteDatabaseManager;
2633
import ru.plumsoftware.data.model.database.DatabaseConstants;
2734
import ru.plumsoftware.data.model.ui.Note;
35+
import ru.plumsoftware.notebook.R;
2836
import ru.plumsoftware.notebook.manager.ads.AdsIds;
37+
import ru.plumsoftware.notebook.manager.extra.ExtraNames;
38+
import ru.plumsoftware.notebook.presentation.activities.AddNoteActivity;
2939
import ru.plumsoftware.notebook.presentation.activities.main.view.MainView;
30-
import ru.plumsoftware.notebook.presentation.presenters.main.MainPresenter;
40+
import ru.plumsoftware.notebook.presentation.dialogs.ProgressDialog;
3141

3242
public class MainPresenterImpl implements MainPresenter {
3343

34-
private MainView view;
44+
private final MainView mainView;
45+
3546
private final Context context;
3647
private final Activity activity;
3748
private SQLiteDatabase sqLiteDatabaseNotes;
49+
3850
private AppOpenAd mainAppOpenAd = null;
51+
private final ProgressDialog progressDialog;
3952

40-
public MainPresenterImpl(MainView view, Context context, Activity activity) {
41-
this.view = view;
53+
private boolean isList = true;
54+
private List<Note> notes;
55+
private final List<Note> filteredNotes;
56+
57+
public MainPresenterImpl(Context context, @NonNull Activity activity, MainView mainView) {
4258
this.context = context;
4359
this.activity = activity;
60+
this.mainView = mainView;
61+
filteredNotes = new ArrayList<>();
62+
63+
progressDialog = new ProgressDialog(context, R.style.CustomProgressDialog);
4464
}
4565

4666
@Override
47-
public void initMobileSdk() {
48-
MobileAds.initialize(context, () -> {
49-
});
67+
public void changeListStyle() {
68+
if (isList) {
69+
mainView.initRecyclerView(notes, new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
70+
mainView.changeFilterButtonImage(R.drawable.ic_table_rows);
71+
} else {
72+
mainView.initRecyclerView(notes, new LinearLayoutManager(context));
73+
mainView.changeFilterButtonImage(R.drawable.ic_baseline_filter_list);
74+
}
75+
isList = !isList;
5076
}
5177

52-
5378
@Override
54-
public void initNotes() {
55-
SQLiteDatabaseManager sqLiteDatabaseManager = new SQLiteDatabaseManager(context);
56-
sqLiteDatabaseNotes = sqLiteDatabaseManager.getWritableDatabase();
57-
58-
List<Note> notes = loadNotes();
59-
view.showNotes(notes);
79+
public void openAddNoteActivity() {
80+
Intent intent = new Intent(activity, AddNoteActivity.class);
81+
intent.putExtra(ExtraNames.MainActivity.isLoadAppOpenAd, false);
82+
intent.putExtra(ExtraNames.MainActivity.LoadInterstitialAd, activity.getIntent().getBooleanExtra(ExtraNames.MainActivity.LoadInterstitialAd, true));
83+
activity.startActivity(intent);
84+
activity.finish();
6085
}
6186

6287
@Override
63-
public void initOpenAds() {
64-
final AppOpenAdLoader appOpenAdLoader = new AppOpenAdLoader(context);
65-
final AdRequestConfiguration adRequestConfiguration = new AdRequestConfiguration.Builder(AdsIds.OPEN_AD_UNIT_ID).build();
66-
view.showLoading();
67-
AppOpenAdEventListener appOpenAdEventListener = new AppOpenAdEventListener() {
68-
@Override
69-
public void onAdShown() {
70-
view.hideLoading();
71-
}
72-
73-
@Override
74-
public void onAdFailedToShow(@NonNull final AdError adError) {
75-
view.hideLoading();
76-
}
77-
78-
@Override
79-
public void onAdDismissed() {
80-
clearAppOpenAd();
81-
}
88+
public void initMobileSdk() {
89+
MobileAds.initialize(context, () -> {
90+
});
91+
}
8292

83-
@Override
84-
public void onAdClicked() {
85-
// Called when a click is recorded for an ad.
86-
}
8793

88-
@Override
89-
public void onAdImpression(@Nullable final ImpressionData impressionData) {
90-
// Called when an impression is recorded for an ad.
94+
@Override
95+
public void initNotes(Conditions conditions) {
96+
if (conditions instanceof Conditions.Search) {
97+
filteredNotes.clear();
98+
String query = ((Conditions.Search) conditions).getQuery();
99+
100+
for (Note note : notes) {
101+
if (note.getNoteName().contains(query) ||
102+
note.getNoteText().contains(query) ||
103+
new SimpleDateFormat("dd.MM.yyyy HH.mm", Locale.getDefault()).format(new Date(note.getAddNoteTime())).contains(query)
104+
) {
105+
filteredNotes.add(note);
106+
}
91107
}
92-
};
93-
94-
AppOpenAdLoadListener appOpenAdLoadListener = new AppOpenAdLoadListener() {
95-
@Override
96-
public void onAdLoaded(@NonNull final AppOpenAd appOpenAd) {
97-
mainAppOpenAd = appOpenAd;
98-
appOpenAd.setAdEventListener(appOpenAdEventListener);
99-
mainAppOpenAd.show(activity);
100-
view.hideLoading();
108+
RecyclerView.LayoutManager layoutManager;
109+
if (isList) {
110+
layoutManager = new LinearLayoutManager(context);
111+
} else {
112+
layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
101113
}
102114

103-
@Override
104-
public void onAdFailedToLoad(@NonNull final AdRequestError adRequestError) {
105-
view.hideLoading();
115+
mainView.initRecyclerView(filteredNotes, layoutManager);
116+
} else if (conditions instanceof Conditions.All) {
117+
progressDialog.showDialog();
118+
if (notes == null) {
119+
SQLiteDatabaseManager sqLiteDatabaseManager = new SQLiteDatabaseManager(context);
120+
sqLiteDatabaseNotes = sqLiteDatabaseManager.getWritableDatabase();
121+
notes = loadNotes();
106122
}
107-
};
108-
109-
appOpenAdLoader.setAdLoadListener(appOpenAdLoadListener);
110-
appOpenAdLoader.loadAd(adRequestConfiguration);
111-
}
112123

113-
@Override
114-
public void loadData() {
115-
view.showLoading();
116-
view.hideLoading();
124+
isList = true;
125+
mainView.changeFilterButtonImage(R.drawable.ic_baseline_filter_list);
126+
mainView.initRecyclerView(notes, new LinearLayoutManager(context));
127+
}
128+
progressDialog.dismiss();
117129
}
118130

119131
@Override
120-
public void detachView() {
121-
view = null;
132+
public void initOpenAds() {
133+
if (activity.getIntent().getBooleanExtra(ExtraNames.MainActivity.isLoadAppOpenAd, true)) {
134+
progressDialog.showDialog();
135+
final AppOpenAdLoader appOpenAdLoader = new AppOpenAdLoader(context);
136+
final AdRequestConfiguration adRequestConfiguration = new AdRequestConfiguration.Builder(AdsIds.OPEN_AD_UNIT_ID).build();
137+
138+
AppOpenAdEventListener appOpenAdEventListener = new AppOpenAdEventListener() {
139+
@Override
140+
public void onAdShown() {
141+
progressDialog.dismiss();
142+
}
143+
144+
@Override
145+
public void onAdFailedToShow(@NonNull final AdError adError) {
146+
progressDialog.dismiss();
147+
}
148+
149+
@Override
150+
public void onAdDismissed() {
151+
clearAppOpenAd();
152+
}
153+
154+
@Override
155+
public void onAdClicked() {
156+
// Called when a click is recorded for an ad.
157+
}
158+
159+
@Override
160+
public void onAdImpression(@Nullable final ImpressionData impressionData) {
161+
// Called when an impression is recorded for an ad.
162+
}
163+
};
164+
AppOpenAdLoadListener appOpenAdLoadListener = new AppOpenAdLoadListener() {
165+
@Override
166+
public void onAdLoaded(@NonNull final AppOpenAd appOpenAd) {
167+
mainAppOpenAd = appOpenAd;
168+
appOpenAd.setAdEventListener(appOpenAdEventListener);
169+
mainAppOpenAd.show(activity);
170+
progressDialog.dismiss();
171+
}
172+
173+
@Override
174+
public void onAdFailedToLoad(@NonNull final AdRequestError adRequestError) {
175+
progressDialog.dismiss();
176+
}
177+
};
178+
179+
appOpenAdLoader.setAdLoadListener(appOpenAdLoadListener);
180+
appOpenAdLoader.loadAd(adRequestConfiguration);
181+
progressDialog.dismiss();
182+
}
122183
}
123184

124185
@NonNull

0 commit comments

Comments
 (0)