Skip to content

Commit 474888e

Browse files
authored
refactor(database): use Jetpack's Navigation Component (#1252)
1 parent 49bcffe commit 474888e

40 files changed

+828
-569
lines changed

database/app/build.gradle

+2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ dependencies {
3535
implementation 'androidx.appcompat:appcompat:1.2.0'
3636
implementation 'androidx.recyclerview:recyclerview:1.1.0'
3737
implementation 'com.google.android.material:material:1.2.1'
38+
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.2'
39+
implementation 'androidx.navigation:navigation-ui-ktx:2.3.2'
3840

3941
// Import the Firebase BoM (see: https://firebase.google.com/docs/android/learn-more#bom)
4042
implementation platform('com.google.firebase:firebase-bom:26.1.1')

database/app/src/androidTest/java/com/google/firebase/quickstart/database/NewPostTest.java

-132
This file was deleted.

database/app/src/main/AndroidManifest.xml

+2-11
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,12 @@
2020
<activity
2121
android:name=".java.MainActivity"
2222
android:label="@string/app_name"
23-
android:theme="@style/AppTheme" />
23+
android:theme="@style/AppTheme.NoActionBar" />
2424

2525
<activity
2626
android:name=".kotlin.MainActivity"
2727
android:label="@string/app_name"
28-
android:theme="@style/AppTheme" />
29-
30-
<activity android:name=".java.SignInActivity" />
31-
<activity android:name=".kotlin.SignInActivity" />
32-
33-
<activity android:name=".java.NewPostActivity" />
34-
<activity android:name=".kotlin.NewPostActivity" />
35-
36-
<activity android:name=".java.PostDetailActivity" />
37-
<activity android:name=".kotlin.PostDetailActivity" />
28+
android:theme="@style/AppTheme.NoActionBar" />
3829
</application>
3930

4031
</manifest>

database/app/src/main/java/com/google/firebase/quickstart/database/EntryChoiceActivity.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ class EntryChoiceActivity : BaseEntryChoiceActivity() {
1111
Choice(
1212
"Java",
1313
"Run the Firebase Realtime Database quickstart written in Java.",
14-
Intent(this, com.google.firebase.quickstart.database.java.SignInActivity::class.java)),
14+
Intent(this, com.google.firebase.quickstart.database.java.MainActivity::class.java)),
1515
Choice(
1616
"Kotlin",
1717
"Run the Firebase Realtime Database quickstart written in Kotlin.",
18-
Intent(this, com.google.firebase.quickstart.database.kotlin.SignInActivity::class.java))
18+
Intent(this, com.google.firebase.quickstart.database.kotlin.MainActivity::class.java))
1919
)
2020
}
2121
}

database/app/src/main/java/com/google/firebase/quickstart/database/java/BaseActivity.java renamed to database/app/src/main/java/com/google/firebase/quickstart/database/java/BaseFragment.java

+3-7
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,15 @@
33
import android.view.View;
44
import android.widget.ProgressBar;
55

6-
import androidx.appcompat.app.AppCompatActivity;
6+
import androidx.fragment.app.Fragment;
77

88
import com.google.firebase.auth.FirebaseAuth;
99

10-
11-
public class BaseActivity extends AppCompatActivity {
12-
10+
public class BaseFragment extends Fragment {
1311
private ProgressBar mProgressBar;
1412

1513
public void setProgressBar(int resId) {
16-
mProgressBar = findViewById(resId);
14+
mProgressBar = getView().findViewById(resId);
1715
}
1816

1917
public void showProgressBar() {
@@ -31,6 +29,4 @@ public void hideProgressBar() {
3129
public String getUid() {
3230
return FirebaseAuth.getInstance().getCurrentUser().getUid();
3331
}
34-
35-
3632
}

database/app/src/main/java/com/google/firebase/quickstart/database/java/MainActivity.java

+27-67
Original file line numberDiff line numberDiff line change
@@ -16,91 +16,51 @@
1616

1717
package com.google.firebase.quickstart.database.java;
1818

19-
import android.content.Intent;
2019
import android.os.Bundle;
21-
import android.view.Menu;
22-
import android.view.MenuItem;
2320
import android.view.View;
2421

25-
import androidx.fragment.app.Fragment;
26-
import androidx.fragment.app.FragmentPagerAdapter;
22+
import androidx.annotation.NonNull;
23+
import androidx.annotation.Nullable;
24+
import androidx.appcompat.app.AppCompatActivity;
25+
import androidx.navigation.NavController;
26+
import androidx.navigation.NavDestination;
27+
import androidx.navigation.Navigation;
2728

28-
import com.google.firebase.auth.FirebaseAuth;
29+
import com.google.android.material.floatingactionbutton.FloatingActionButton;
2930
import com.google.firebase.quickstart.database.R;
3031
import com.google.firebase.quickstart.database.databinding.ActivityMainBinding;
31-
import com.google.firebase.quickstart.database.java.fragment.MyPostsFragment;
32-
import com.google.firebase.quickstart.database.java.fragment.MyTopPostsFragment;
33-
import com.google.firebase.quickstart.database.java.fragment.RecentPostsFragment;
3432

35-
public class MainActivity extends BaseActivity {
33+
public class MainActivity extends AppCompatActivity {
3634

37-
private static final String TAG = "MainActivity";
35+
private FloatingActionButton fab;
36+
private NavController navController;
3837

3938
@Override
4039
protected void onCreate(Bundle savedInstanceState) {
4140
super.onCreate(savedInstanceState);
4241
ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
4342
setContentView(binding.getRoot());
43+
setSupportActionBar(binding.toolbar);
4444

45-
// Create the adapter that will return a fragment for each section
46-
FragmentPagerAdapter mPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager(),
47-
FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
48-
private final Fragment[] mFragments = new Fragment[]{
49-
new RecentPostsFragment(),
50-
new MyPostsFragment(),
51-
new MyTopPostsFragment(),
52-
};
53-
private final String[] mFragmentNames = new String[]{
54-
getString(R.string.heading_recent),
55-
getString(R.string.heading_my_posts),
56-
getString(R.string.heading_my_top_posts)
57-
};
45+
fab = binding.fab;
5846

47+
navController = Navigation.findNavController(this, R.id.nav_host_fragment);
48+
navController.setGraph(R.navigation.nav_graph_java);
49+
navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
5950
@Override
60-
public Fragment getItem(int position) {
61-
return mFragments[position];
62-
}
63-
64-
@Override
65-
public int getCount() {
66-
return mFragments.length;
67-
}
68-
69-
@Override
70-
public CharSequence getPageTitle(int position) {
71-
return mFragmentNames[position];
72-
}
73-
};
74-
// Set up the ViewPager with the sections adapter.
75-
binding.container.setAdapter(mPagerAdapter);
76-
binding.tabs.setupWithViewPager(binding.container);
77-
78-
// Button launches NewPostActivity
79-
binding.fabNewPost.setOnClickListener(new View.OnClickListener() {
80-
@Override
81-
public void onClick(View v) {
82-
startActivity(new Intent(MainActivity.this, NewPostActivity.class));
51+
public void onDestinationChanged(@NonNull NavController controller, @NonNull NavDestination destination, @Nullable Bundle arguments) {
52+
if (destination.getId() == R.id.MainFragment) {
53+
fab.setVisibility(View.VISIBLE);
54+
fab.setOnClickListener(new View.OnClickListener() {
55+
@Override
56+
public void onClick(View view) {
57+
navController.navigate(R.id.action_MainFragment_to_NewPostFragment);
58+
}
59+
});
60+
} else {
61+
fab.setVisibility(View.GONE);
62+
}
8363
}
8464
});
8565
}
86-
87-
@Override
88-
public boolean onCreateOptionsMenu(Menu menu) {
89-
getMenuInflater().inflate(R.menu.menu_main, menu);
90-
return true;
91-
}
92-
93-
@Override
94-
public boolean onOptionsItemSelected(MenuItem item) {
95-
int i = item.getItemId();
96-
if (i == R.id.action_logout) {
97-
FirebaseAuth.getInstance().signOut();
98-
startActivity(new Intent(this, SignInActivity.class));
99-
finish();
100-
return true;
101-
} else {
102-
return super.onOptionsItemSelected(item);
103-
}
104-
}
105-
10666
}

0 commit comments

Comments
 (0)