Skip to content

Commit fd800b2

Browse files
committed
[Android] upgraded MVVM architecture, Java8 code style,
removed redundant classes in open_weather module
1 parent 485192d commit fd800b2

28 files changed

+839
-905
lines changed

AAD-Preparation/.idea/workspace.xml

Lines changed: 404 additions & 298 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

AAD-Preparation/app/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ android {
9999
implementation "jp.wasabeef:fresco-processors:${rootProject.ext.frescoProcessors}"
100100
implementation "com.google.firebase:firebase-database:${rootProject.ext.firebaseVersion}"
101101
implementation "androidx.recyclerview:recyclerview-selection:${rootProject.ext.recyclerviewSelection}"
102+
implementation "androidx.paging:paging-common:${rootProject.ext.paging}"
103+
implementation "androidx.paging:paging-runtime:${rootProject.ext.paging}"
102104
// To support DayNight style, update to at lease 1.1.0-alpha02
103105
api "com.google.android.material:material:${rootProject.ext.material}"
104106
api "com.squareup.okhttp3:okhttp:${rootProject.ext.okhttp}"

AAD-Preparation/app/src/main/java/com/catherine/materialdesignapp/FirebaseDB.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ public class FirebaseDB {
44
public static String PLAYLIST = "playlists";
55
public static String SONGS = "songs";
66
public static String ALBUMS = "albums";
7+
public static String ARTISTS = "artists";
78
}

AAD-Preparation/app/src/main/java/com/catherine/materialdesignapp/activities/DynamicDeliveryActivity.java

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,22 @@
1212
import android.view.View;
1313
import android.widget.FrameLayout;
1414
import android.widget.TextView;
15+
1516
import androidx.annotation.NonNull;
1617
import androidx.appcompat.widget.Toolbar;
1718
import androidx.constraintlayout.widget.ConstraintLayout;
1819
import androidx.core.widget.ContentLoadingProgressBar;
20+
1921
import com.catherine.materialdesignapp.BuildConfig;
2022
import com.catherine.materialdesignapp.R;
2123
import com.catherine.materialdesignapp.components.StepItem;
2224
import com.google.android.material.bottomsheet.BottomSheetBehavior;
2325
import com.google.android.material.button.MaterialButton;
2426
import com.google.android.play.core.splitcompat.SplitCompat;
25-
import com.google.android.play.core.splitinstall.*;
27+
import com.google.android.play.core.splitinstall.SplitInstallManager;
28+
import com.google.android.play.core.splitinstall.SplitInstallManagerFactory;
29+
import com.google.android.play.core.splitinstall.SplitInstallRequest;
30+
import com.google.android.play.core.splitinstall.SplitInstallSessionState;
2631
import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus;
2732

2833
import java.io.BufferedReader;
@@ -32,7 +37,7 @@
3237
import java.util.List;
3338
import java.util.Locale;
3439

35-
public class DynamicDeliveryActivity extends BaseActivity implements View.OnClickListener, SplitInstallStateUpdatedListener {
40+
public class DynamicDeliveryActivity extends BaseActivity {
3641
public final static String TAG = DynamicDeliveryActivity.class.getSimpleName();
3742
private BottomSheetBehavior behavior;
3843
private ConstraintLayout steps_area;
@@ -96,10 +101,10 @@ private void initView() {
96101
StepItem stepItem2 = findViewById(R.id.step2);
97102
StepItem stepItem3 = findViewById(R.id.step3);
98103
StepItem stepItem4 = findViewById(R.id.step4);
99-
stepItem1.setOnClickListener(this);
100-
stepItem2.setOnClickListener(this);
101-
stepItem3.setOnClickListener(this);
102-
stepItem4.setOnClickListener(this);
104+
stepItem1.setOnClickListener(this::onClick);
105+
stepItem2.setOnClickListener(this::onClick);
106+
stepItem3.setOnClickListener(this::onClick);
107+
stepItem4.setOnClickListener(this::onClick);
103108
dynamicModules[0].stepItem = stepItem1;
104109
dynamicModules[1].stepItem = stepItem2;
105110
dynamicModules[2].stepItem = stepItem3;
@@ -109,9 +114,9 @@ private void initView() {
109114

110115
bottomSheet = findViewById(R.id.bottom_sheet);
111116
btn_launch = bottomSheet.findViewById(R.id.btn_launch);
112-
btn_launch.setOnClickListener(this);
117+
btn_launch.setOnClickListener(this::onClick);
113118
btn_uninstall = bottomSheet.findViewById(R.id.btn_uninstall);
114-
btn_uninstall.setOnClickListener(this);
119+
btn_uninstall.setOnClickListener(this::onClick);
115120
tv_info = bottomSheet.findViewById(R.id.tv_info);
116121
progressBar = bottomSheet.findViewById(R.id.progress_bar);
117122
behavior = BottomSheetBehavior.from(bottomSheet);
@@ -132,24 +137,23 @@ public void onSlide(@NonNull View bottomSheet, float slideOffset) {
132137

133138
@Override
134139
protected void onResume() {
135-
splitInstallManager.registerListener(this);
140+
splitInstallManager.registerListener(this::onStateUpdate);
136141
super.onResume();
137142
}
138143

139144
@Override
140145
protected void onPause() {
141-
splitInstallManager.unregisterListener(this);
146+
splitInstallManager.unregisterListener(this::onStateUpdate);
142147
super.onPause();
143148
}
144149

145150
@Override
146151
protected void onDestroy() {
147-
splitInstallManager.unregisterListener(this);
152+
splitInstallManager.unregisterListener(this::onStateUpdate);
148153
super.onDestroy();
149154
}
150155

151-
@Override
152-
public void onClick(View v) {
156+
private void onClick(View v) {
153157
DynamicModule module = dynamicModules[currentStepInt - 1];
154158
switch (v.getId()) {
155159
case R.id.step1:
@@ -237,8 +241,7 @@ private void updateDownloadProgress(SplitInstallSessionState state) {
237241
progressBar.setProgress(Math.round(state.bytesDownloaded()));
238242
}
239243

240-
@Override
241-
public void onStateUpdate(SplitInstallSessionState state) {
244+
private void onStateUpdate(SplitInstallSessionState state) {
242245
DynamicModule module = dynamicModules[currentStepInt - 1];
243246
switch (state.status()) {
244247
case SplitInstallSessionStatus.DOWNLOADING:

AAD-Preparation/app/src/main/java/com/catherine/materialdesignapp/activities/NotificationActivity.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,24 @@
77
import android.text.TextWatcher;
88
import android.view.View;
99
import android.widget.CompoundButton;
10+
1011
import androidx.appcompat.widget.Toolbar;
1112
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
13+
1214
import com.catherine.materialdesignapp.R;
1315
import com.catherine.materialdesignapp.models.ChannelInfo;
1416
import com.catherine.materialdesignapp.utils.NotificationUtils;
1517
import com.google.android.material.button.MaterialButton;
1618
import com.google.android.material.chip.Chip;
1719
import com.google.android.material.textfield.TextInputLayout;
1820

19-
import java.util.*;
21+
import java.util.HashMap;
22+
import java.util.HashSet;
23+
import java.util.Locale;
24+
import java.util.Map;
25+
import java.util.Set;
2026

21-
public class NotificationActivity extends BaseActivity implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
27+
public class NotificationActivity extends BaseActivity {
2228
public final static String TAG = NotificationActivity.class.getSimpleName();
2329

2430
private SwipeRefreshLayout swipeRefreshLayout;
@@ -49,23 +55,24 @@ private void initComponent() {
4955
swipeRefreshLayout.setRefreshing(false);
5056
});
5157
MaterialButton btn_push = findViewById(R.id.btn_push);
52-
btn_push.setOnClickListener(this);
5358
Chip chip_local = findViewById(R.id.chip_local);
54-
chip_local.setOnCheckedChangeListener(this);
5559
Chip chip_local_hands_up = findViewById(R.id.chip_local_hands_up);
56-
chip_local_hands_up.setOnCheckedChangeListener(this);
5760
Chip chip_local_reply = findViewById(R.id.chip_local_reply);
58-
chip_local_reply.setOnCheckedChangeListener(this);
5961
Chip chip_fcm = findViewById(R.id.chip_fcm);
60-
chip_fcm.setOnCheckedChangeListener(this);
6162
til_title = findViewById(R.id.til_title);
62-
til_title.getEditText().addTextChangedListener(new MyTextWatcher(til_title.getEditText().getId()));
6363
til_subtitle = findViewById(R.id.til_subtitle);
64-
til_subtitle.getEditText().addTextChangedListener(new MyTextWatcher(til_subtitle.getEditText().getId()));
6564
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
6665
til_channel = findViewById(R.id.til_channel);
6766
til_channel.getEditText().addTextChangedListener(new MyTextWatcher(til_channel.getEditText().getId()));
6867
}
68+
69+
btn_push.setOnClickListener(this::onClick);
70+
chip_local.setOnCheckedChangeListener(this::onCheckedChanged);
71+
chip_local_hands_up.setOnCheckedChangeListener(this::onCheckedChanged);
72+
chip_local_reply.setOnCheckedChangeListener(this::onCheckedChanged);
73+
chip_fcm.setOnCheckedChangeListener(this::onCheckedChanged);
74+
til_title.getEditText().addTextChangedListener(new MyTextWatcher(til_title.getEditText().getId()));
75+
til_subtitle.getEditText().addTextChangedListener(new MyTextWatcher(til_subtitle.getEditText().getId()));
6976
}
7077

7178
private void clearData() {
@@ -76,8 +83,7 @@ private void clearData() {
7683
til_channel.setErrorEnabled(false);
7784
}
7885

79-
@Override
80-
public void onClick(View v) {
86+
private void onClick(View v) {
8187
if (v.getId() == R.id.btn_push) {
8288
if (selectedChips.isEmpty()) {
8389
showSnackbar(swipeRefreshLayout, getString(R.string.no_notification_services_selected));
@@ -169,8 +175,7 @@ public void onClick(View v) {
169175
}
170176
}
171177

172-
@Override
173-
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
178+
private void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
174179
if (isChecked) {
175180
selectedChips.add(buttonView.getId());
176181
} else {

AAD-Preparation/app/src/main/java/com/catherine/materialdesignapp/activities/UIComponentsActivity.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@
77
import android.view.Menu;
88
import android.view.MenuItem;
99
import android.view.View;
10+
1011
import androidx.annotation.NonNull;
1112
import androidx.appcompat.widget.SearchView;
1213
import androidx.appcompat.widget.Toolbar;
1314
import androidx.fragment.app.Fragment;
1415
import androidx.fragment.app.FragmentManager;
1516
import androidx.viewpager.widget.ViewPager;
17+
1618
import com.catherine.materialdesignapp.R;
1719
import com.catherine.materialdesignapp.fragments.FavoritesFragment;
1820
import com.catherine.materialdesignapp.fragments.HomeFragment;
@@ -23,8 +25,7 @@
2325
import com.google.android.material.floatingactionbutton.FloatingActionButton;
2426
import com.google.android.material.tabs.TabLayout;
2527

26-
public class UIComponentsActivity extends BaseActivity implements BottomNavigationView.OnNavigationItemSelectedListener,
27-
UIComponentsListener, FragmentManager.OnBackStackChangedListener, SearchView.OnQueryTextListener {
28+
public class UIComponentsActivity extends BaseActivity implements UIComponentsListener, SearchView.OnQueryTextListener {
2829
public final static String TAG = UIComponentsActivity.class.getSimpleName();
2930

3031
private enum Tag {
@@ -81,21 +82,18 @@ private void initComponent(Bundle savedInstanceState) {
8182
for (int i = 0; i < titles.length; i++) {
8283
menu.getItem(i).setTitle(titles[i]);
8384
}
84-
navigationView.setOnNavigationItemSelectedListener(this);
85+
navigationView.setOnNavigationItemSelectedListener(this::onNavigationItemSelected);
8586

8687
FloatingActionButton fab_addToPlaylist = findViewById(R.id.fab_addToPlaylist);
8788
fab_addToPlaylist.setOnClickListener(v -> {
88-
89-
9089
});
9190

9291

9392
// ViewPager for MusicFragment
9493
tabLayout = findViewById(R.id.tab_layout);
9594
tabLayout.setVisibility(View.GONE);
9695

97-
getSupportFragmentManager().addOnBackStackChangedListener(this);
98-
96+
getSupportFragmentManager().addOnBackStackChangedListener(this::onBackStackChanged);
9997
if (savedInstanceState == null) {
10098
// initialise home fragment
10199
navigationView.setSelectedItemId(R.id.nav_home);
@@ -114,8 +112,7 @@ public boolean onCreateOptionsMenu(Menu menu) {
114112
return true;
115113
}
116114

117-
@Override
118-
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
115+
private boolean onNavigationItemSelected(@NonNull MenuItem item) {
119116
Log.d(TAG, "onNavigationItemSelected:" + item.getTitle());
120117
return switchTab(item.getItemId());
121118
}
@@ -227,8 +224,7 @@ public void onBackPressed() {
227224
}
228225
}
229226

230-
@Override
231-
public void onBackStackChanged() {
227+
private void onBackStackChanged() {
232228
Log.w(TAG, String.format("Back stack counts: %d", getSupportFragmentManager().getBackStackEntryCount()));
233229
}
234230

AAD-Preparation/app/src/main/java/com/catherine/materialdesignapp/components/PlaylistHelper.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
import android.text.TextWatcher;
77
import android.util.Log;
88
import android.view.View;
9+
910
import androidx.recyclerview.widget.LinearLayoutManager;
1011
import androidx.recyclerview.widget.RecyclerView;
12+
1113
import com.catherine.materialdesignapp.FirebaseDB;
1214
import com.catherine.materialdesignapp.R;
1315
import com.catherine.materialdesignapp.adapters.AddToPlaylistAdapter;
@@ -18,11 +20,19 @@
1820
import com.google.android.material.bottomsheet.BottomSheetDialog;
1921
import com.google.android.material.button.MaterialButton;
2022
import com.google.android.material.textfield.TextInputLayout;
21-
import com.google.firebase.database.*;
22-
23-
import java.util.*;
24-
25-
public class PlaylistHelper implements View.OnClickListener {
23+
import com.google.firebase.database.DataSnapshot;
24+
import com.google.firebase.database.DatabaseError;
25+
import com.google.firebase.database.DatabaseReference;
26+
import com.google.firebase.database.FirebaseDatabase;
27+
import com.google.firebase.database.ValueEventListener;
28+
29+
import java.util.ArrayList;
30+
import java.util.HashMap;
31+
import java.util.List;
32+
import java.util.Locale;
33+
import java.util.Map;
34+
35+
public class PlaylistHelper {
2636
private String TAG = "PlaylistHelper";
2737
private AddToPlaylistAdapter addToPlaylistAdapter;
2838
private BottomSheetDialog playlistsDialog, createPlaylistDialog;
@@ -115,7 +125,7 @@ public void onItemLongClick(View view, int position) {
115125
View createPlaylistView = activity.getLayoutInflater().inflate(R.layout.bottom_sheet_create_a_playlist, null);
116126
createPlaylistDialog.setContentView(createPlaylistView);
117127
btn_submit = createPlaylistDialog.findViewById(R.id.btn_submit);
118-
btn_submit.setOnClickListener(this);
128+
btn_submit.setOnClickListener(this::onClick);
119129
til_title = createPlaylistDialog.findViewById(R.id.til_title);
120130
til_title.getEditText().addTextChangedListener(new MyTextWatcher(til_title.getEditText().getId()));
121131

@@ -164,8 +174,7 @@ private String[] fillInTitles(List<Playlist> playlists) {
164174
}
165175
}
166176

167-
@Override
168-
public void onClick(View v) {
177+
private void onClick(View v) {
169178
// create a new playlist with the chosen song
170179
if (v.getId() == R.id.btn_submit) {
171180
String name = til_title.getEditText().getText().toString();

AAD-Preparation/app/src/main/java/com/catherine/materialdesignapp/fragments/AlbumsFragment.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import com.catherine.materialdesignapp.adapters.AlbumAdapter;
2424
import com.catherine.materialdesignapp.jetpack.entities.Album;
2525
import com.catherine.materialdesignapp.jetpack.view_models.AlbumViewModel;
26+
import com.catherine.materialdesignapp.jetpack.view_models.AlbumViewModelFactory;
2627
import com.catherine.materialdesignapp.listeners.OnItemClickListener;
2728
import com.catherine.materialdesignapp.listeners.OnSearchViewListener;
2829
import com.catherine.materialdesignapp.listeners.UIComponentsListener;
@@ -49,9 +50,6 @@ public class AlbumsFragment extends ChildOfMusicFragment implements OnSearchView
4950
private PrefetchSubscriber subscriber;
5051
private UIComponentsListener listener;
5152

52-
// RoomDatabase
53-
private AlbumViewModel albumViewModel;
54-
5553
@Override
5654
public View onCreateView(LayoutInflater inflater, ViewGroup container,
5755
Bundle savedInstanceState) {
@@ -118,7 +116,9 @@ public void onItemLongClick(View view, int position) {
118116
subscriber = new PrefetchSubscriber();
119117
listener = (UIComponentsListener) getActivity();
120118

121-
albumViewModel = ViewModelProviders.of(this).get(AlbumViewModel.class);
119+
// RoomDatabase
120+
AlbumViewModelFactory albumViewModelFactory = AlbumViewModelFactory.createFactory(getActivity());
121+
AlbumViewModel albumViewModel = ViewModelProviders.of(this, albumViewModelFactory).get(AlbumViewModel.class);
122122
albumViewModel.getAlbumLiveData().observe(this, albums -> {
123123
filteredAlbums.clear();
124124
filteredAlbums.addAll(albums);
@@ -182,10 +182,4 @@ public void onFragmentShow() {
182182
public void onFragmentHide() {
183183

184184
}
185-
186-
@Override
187-
public void onDestroy() {
188-
albumViewModel.release();
189-
super.onDestroy();
190-
}
191185
}

AAD-Preparation/app/src/main/java/com/catherine/materialdesignapp/fragments/ArtistsFragment.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.catherine.materialdesignapp.components.ArtistItemKeyProvider;
2222
import com.catherine.materialdesignapp.jetpack.entities.Artist;
2323
import com.catherine.materialdesignapp.jetpack.view_models.ArtistViewModel;
24+
import com.catherine.materialdesignapp.jetpack.view_models.ArtistViewModelFactory;
2425
import com.catherine.materialdesignapp.listeners.OnSearchViewListener;
2526
import com.catherine.materialdesignapp.listeners.UIComponentsListener;
2627
import com.catherine.materialdesignapp.utils.TextHelper;
@@ -37,8 +38,6 @@ public class ArtistsFragment extends ChildOfMusicFragment implements OnSearchVie
3738
private SelectionTracker<String> tracker;
3839
private UIComponentsListener listener;
3940

40-
private ArtistViewModel artistViewModel;
41-
4241
@Override
4342
public View onCreateView(LayoutInflater inflater, ViewGroup container,
4443
Bundle savedInstanceState) {
@@ -78,7 +77,8 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
7877
listener = (UIComponentsListener) getActivity();
7978

8079
// RoomDatabase
81-
artistViewModel = ViewModelProviders.of(this).get(ArtistViewModel.class);
80+
ArtistViewModelFactory artistViewModelFactory = ArtistViewModelFactory.createFactory(getActivity());
81+
ArtistViewModel artistViewModel = ViewModelProviders.of(this, artistViewModelFactory).get(ArtistViewModel.class);
8282
artistViewModel.getArtistLiveData().observe(this, artists -> {
8383
filteredArtists.clear();
8484
filteredArtists.addAll(artists);
@@ -136,7 +136,6 @@ public void onItemStateChanged(@NonNull String key, boolean selected) {
136136

137137
@Override
138138
public void onDestroy() {
139-
artistViewModel.release();
140139
super.onDestroy();
141140
}
142141
}

0 commit comments

Comments
 (0)