Skip to content

Commit 9e89e0e

Browse files
authored
Cleanup RTDB Paging demo for consistency (#1607)
1 parent d170531 commit 9e89e0e

File tree

9 files changed

+86
-95
lines changed

9 files changed

+86
-95
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
<!-- Realtime database paging demo -->
6060
<activity
6161
android:name=".database.realtime.FirebaseDbPagingActivity"
62-
android:label="@string/title_paging_database_activity" />
62+
android:label="@string/title_realtime_database_paging_activity" />
6363

6464
<activity
6565
android:name=".database.realtime.RealtimeDbChatIndexActivity"

app/src/main/java/com/firebase/uidemo/ChooserActivity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ private static class ActivityChooserAdapter
8282
R.string.title_firestore_activity,
8383
R.string.title_firestore_paging_activity,
8484
R.string.title_realtime_database_activity,
85-
R.string.title_paging_database_activity,
85+
R.string.title_realtime_database_paging_activity,
8686
R.string.title_storage_activity
8787
};
8888

@@ -92,7 +92,7 @@ private static class ActivityChooserAdapter
9292
R.string.desc_firestore,
9393
R.string.desc_firestore_paging,
9494
R.string.desc_realtime_database,
95-
R.string.desc_paging_database,
95+
R.string.desc_realtime_database_paging,
9696
R.string.desc_storage
9797
};
9898

app/src/main/java/com/firebase/uidemo/database/firestore/FirestorePagingActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ protected void onLoadingStateChanged(@NonNull LoadingState state) {
118118

119119
@Override
120120
public boolean onCreateOptionsMenu(@NonNull Menu menu) {
121-
getMenuInflater().inflate(R.menu.menu_firestore_paging, menu);
121+
getMenuInflater().inflate(R.menu.menu_paging, menu);
122122
return true;
123123
}
124124

app/src/main/java/com/firebase/uidemo/database/realtime/FirebaseDbPagingActivity.java

Lines changed: 71 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import android.support.v7.widget.RecyclerView;
1111
import android.util.Log;
1212
import android.view.LayoutInflater;
13+
import android.view.Menu;
14+
import android.view.MenuItem;
1315
import android.view.View;
1416
import android.view.ViewGroup;
1517
import android.widget.TextView;
@@ -23,6 +25,8 @@
2325
import com.google.firebase.database.FirebaseDatabase;
2426
import com.google.firebase.database.Query;
2527

28+
import java.util.Locale;
29+
2630
import butterknife.BindView;
2731
import butterknife.ButterKnife;
2832

@@ -36,6 +40,7 @@ public class FirebaseDbPagingActivity extends AppCompatActivity {
3640
@BindView(R.id.swipe_refresh_layout)
3741
SwipeRefreshLayout mSwipeRefreshLayout;
3842

43+
private FirebaseDatabase mDatabase;
3944
private Query mQuery;
4045

4146
@Override
@@ -44,7 +49,8 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
4449
setContentView(R.layout.activity_database_paging);
4550
ButterKnife.bind(this);
4651

47-
mQuery = FirebaseDatabase.getInstance().getReference().child("posts");
52+
mDatabase = FirebaseDatabase.getInstance();
53+
mQuery = mDatabase.getReference().child("items");
4854

4955
setUpAdapter();
5056
}
@@ -59,27 +65,27 @@ private void setUpAdapter() {
5965
.build();
6066

6167
//Initialize Firebase Paging Options
62-
DatabasePagingOptions<Post> options = new DatabasePagingOptions.Builder<Post>()
68+
DatabasePagingOptions<Item> options = new DatabasePagingOptions.Builder<Item>()
6369
.setLifecycleOwner(this)
64-
.setQuery(mQuery, config, Post.class)
70+
.setQuery(mQuery, config, Item.class)
6571
.build();
6672

6773
//Initializing Adapter
68-
final FirebaseRecyclerPagingAdapter<Post, PostViewHolder> mAdapter =
69-
new FirebaseRecyclerPagingAdapter<Post, PostViewHolder>(options) {
74+
final FirebaseRecyclerPagingAdapter<Item, ItemViewHolder> mAdapter =
75+
new FirebaseRecyclerPagingAdapter<Item, ItemViewHolder>(options) {
7076
@NonNull
7177
@Override
72-
public PostViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
78+
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
7379
int viewType) {
7480
View view = LayoutInflater.from(parent.getContext())
75-
.inflate(R.layout.item_post, parent, false);
76-
return new PostViewHolder(view);
81+
.inflate(R.layout.item_item, parent, false);
82+
return new ItemViewHolder(view);
7783
}
7884

7985
@Override
80-
protected void onBindViewHolder(@NonNull PostViewHolder holder,
86+
protected void onBindViewHolder(@NonNull ItemViewHolder holder,
8187
int position,
82-
@NonNull Post model) {
88+
@NonNull Item model) {
8389
holder.bind(model);
8490
}
8591

@@ -90,26 +96,23 @@ protected void onLoadingStateChanged(@NonNull LoadingState state) {
9096
case LOADING_MORE:
9197
mSwipeRefreshLayout.setRefreshing(true);
9298
break;
93-
9499
case LOADED:
95100
mSwipeRefreshLayout.setRefreshing(false);
96101
break;
97-
98102
case FINISHED:
99103
mSwipeRefreshLayout.setRefreshing(false);
100-
Toast.makeText(getApplicationContext(), getString(R.string.paging_finished_message), Toast.LENGTH_SHORT).show();
104+
showToast(getString(R.string.paging_finished_message));
101105
break;
102-
103106
case ERROR:
104-
retry();
107+
showToast(getString(R.string.unknown_error));
105108
break;
106109
}
107110
}
108111

109112
@Override
110113
protected void onError(DatabaseError databaseError) {
111114
mSwipeRefreshLayout.setRefreshing(false);
112-
Log.e(TAG, databaseError.getMessage());
115+
Log.e(TAG, databaseError.getDetails(), databaseError.toException());
113116
}
114117
};
115118

@@ -126,35 +129,71 @@ public void onRefresh() {
126129
});
127130
}
128131

129-
public static class Post {
130132

131-
@Nullable public String title;
132-
@Nullable public String body;
133+
@Override
134+
public boolean onCreateOptionsMenu(@NonNull Menu menu) {
135+
getMenuInflater().inflate(R.menu.menu_paging, menu);
136+
return true;
137+
}
138+
139+
@Override
140+
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
141+
if (item.getItemId() == R.id.item_add_data) {
142+
showToast("Adding data...");
143+
createItems();
144+
return true;
145+
}
146+
return super.onOptionsItemSelected(item);
147+
}
148+
149+
@NonNull
150+
private void createItems() {
151+
for (int i = 0; i < 250; i++) {
152+
String title = "Item " + i;
133153

134-
public Post(){}
154+
String id = String.format(Locale.getDefault(), "item_%03d", i);
155+
Item item = new Item(title, i);
135156

136-
public Post(@Nullable String title, @Nullable String body) {
137-
this.title = title;
138-
this.body = body;
157+
mDatabase.getReference("items").child(id).setValue(item);
139158
}
140159
}
141160

142-
public static class PostViewHolder extends RecyclerView.ViewHolder {
161+
private void showToast(@NonNull String message) {
162+
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
163+
}
164+
165+
166+
public static class Item {
167+
168+
@Nullable
169+
public String text;
170+
public int value;
171+
172+
public Item(){}
173+
174+
public Item(@Nullable String text, int value) {
175+
this.text = text;
176+
this.value = value;
177+
}
178+
}
179+
180+
public static class ItemViewHolder extends RecyclerView.ViewHolder {
181+
143182

144-
@BindView(R.id.textViewTitle)
145-
TextView mTitleView;
183+
@BindView(R.id.item_text)
184+
TextView mTextView;
146185

147-
@BindView(R.id.textViewBody)
148-
TextView mBodyView;
186+
@BindView(R.id.item_value)
187+
TextView mValueView;
149188

150-
PostViewHolder(@NonNull View itemView) {
189+
ItemViewHolder(@NonNull View itemView) {
151190
super(itemView);
152191
ButterKnife.bind(this, itemView);
153192
}
154193

155-
void bind(@NonNull Post post) {
156-
mTitleView.setText(post.title);
157-
mBodyView.setText(post.body);
194+
void bind(@NonNull Item item) {
195+
mTextView.setText(item.text);
196+
mValueView.setText(String.valueOf(item.value));
158197
}
159198
}
160199

app/src/main/res/layout/activity_database_paging.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@
1616
android:paddingLeft="16dp"
1717
android:paddingTop="8dp"
1818
android:paddingRight="16dp"
19-
tools:listitem="@layout/item_post" />
19+
tools:listitem="@layout/item_item" />
2020

2121
</android.support.v4.widget.SwipeRefreshLayout>

app/src/main/res/layout/item_post.xml

Lines changed: 0 additions & 47 deletions
This file was deleted.

app/src/main/res/values/strings.xml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@
22
<string name="app_name">Firebase UI</string>
33

44
<!-- Chooser -->
5-
<string name="title_auth_activity">Auth UI demo</string>
5+
<string name="title_auth_activity">Auth UI Demo</string>
66
<string name="title_firestore_activity">Cloud Firestore Demo</string>
77
<string name="title_firestore_paging_activity">Cloud Firestore Paging Demo</string>
8-
<string name="title_realtime_database_activity">Real-time database demo</string>
9-
<string name="title_paging_database_activity">Paging database demo</string>
8+
<string name="title_realtime_database_activity">Realtime Database Demo</string>
9+
<string name="title_realtime_database_paging_activity">Realtime Database Paging Demo</string>
1010
<string name="title_storage_activity">Storage Image Demo</string>
1111

1212
<string name="desc_auth">Demonstrates the Firebase Auth UI flow, with customization options.</string>
1313
<string name="desc_anonymous_upgrade">Demonstrates upgrading an anonymous account using FirebaseUI.</string>
1414
<string name="desc_firestore">Demonstrates using a FirestoreRecyclerAdapter to load data from Cloud Firestore into a RecyclerView for a basic chat app.</string>
1515
<string name="desc_firestore_paging">Demonstrates using a FirestorePagingAdapter to load/infinite scroll paged data from Cloud Firestore.</string>
1616
<string name="desc_realtime_database">Demonstrates using a FirebaseRecyclerAdapter to load data from Firebase Database into a RecyclerView for a basic chat app.</string>
17-
<string name="desc_paging_database">Demonstrates using a FirebaseRecyclerPagingAdapter to load/infinite scroll paged data from Firebase Database.</string>
17+
<string name="desc_realtime_database_paging">Demonstrates using a FirebaseRecyclerPagingAdapter to load/infinite scroll paged data from Firebase Realtime Database.</string>
1818
<string name="desc_storage">Demonstrates displaying an image from Cloud Storage using Glide.</string>
1919

2020
<!-- Auth UI -->
@@ -120,8 +120,6 @@
120120
<string name="start_chatting">No messages. Start chatting at the bottom!</string>
121121
<string name="signing_in">Signing in…</string>
122122
<string name="signed_in">Signed In</string>
123-
<string name="post_text_title">Title</string>
124-
<string name="post_text_body">Body</string>
125123
<string name="anonymous_auth_failed_msg">
126124
Anonymous authentication failed, various components of the demo will not work.
127125
Make sure your device is online and that Anonymous Auth is configured in your Firebase project

database/src/main/java/com/firebase/ui/database/paging/FirebaseDataSource.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ public class FirebaseDataSource extends PageKeyedDataSource<String, DataSnapshot
3434
private final MutableLiveData<LoadingState> mLoadingState = new MutableLiveData<>();
3535
private final MutableLiveData<DatabaseError> mError = new MutableLiveData<>();
3636

37-
private static final String STATUS_DATABASE_NOT_FOUND = "DATABASE NOT FOUND";
38-
private static final String MESSAGE_DATABASE_NOT_FOUND = "Database not found at given child path !";
39-
private static final String DETAILS_DATABASE_NOT_FOUND = "Database Children Not Found in the specified child path. Please specify correct child path/reference";
37+
private static final String STATUS_DATABASE_NOT_FOUND = "DATA_NOT_FOUND";
38+
private static final String MESSAGE_DATABASE_NOT_FOUND = "Data not found at given child path!";
39+
private static final String DETAILS_DATABASE_NOT_FOUND = "No data was returned for the given query: ";
4040

4141
private Runnable mRetryRunnable;
4242

@@ -214,10 +214,11 @@ private String getLastPageKey(@NonNull List<DataSnapshot> data) {
214214
}
215215

216216
private void setDatabaseNotFoundError(){
217+
String details = DETAILS_DATABASE_NOT_FOUND + mQuery.toString();
217218
mError.postValue(DatabaseError.fromStatus(
218219
STATUS_DATABASE_NOT_FOUND,
219-
DETAILS_DATABASE_NOT_FOUND,
220-
MESSAGE_DATABASE_NOT_FOUND));
220+
MESSAGE_DATABASE_NOT_FOUND,
221+
details));
221222

222223
mLoadingState.postValue(LoadingState.ERROR);
223224
}

0 commit comments

Comments
 (0)