Skip to content

Commit 08c8faf

Browse files
manny-jimenezManny Jimenez
and
Manny Jimenez
authored
Extending test-app to have buttons for all sdk methods (#3581)
* Extending test-app * Removing comment * responding to comments * Delete MainActivityTest.java * running linter * removing unnecessary additions to gradle * Fixing lint errors Co-authored-by: Manny Jimenez <[email protected]>
1 parent 10fb9b2 commit 08c8faf

File tree

4 files changed

+293
-127
lines changed

4 files changed

+293
-127
lines changed
Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3-
package="com.googletest.firebase.appdistribution.testapp" >
3+
package="com.googletest.firebase.appdistribution.testapp">
44

5-
<application
6-
android:allowBackup="true"
7-
android:icon="@mipmap/ic_launcher"
8-
android:label="@string/app_name"
9-
android:roundIcon="@mipmap/ic_launcher_round"
10-
android:supportsRtl="true"
11-
android:theme="@style/Theme.AppDistributionTestAppSample" >
12-
<activity android:name="com.googletest.firebase.appdistribution.testapp.MainActivity" >
13-
<intent-filter>
14-
<action android:name="android.intent.action.MAIN" />
5+
<application
6+
android:allowBackup="true"
7+
android:icon="@mipmap/ic_launcher"
8+
android:label="@string/app_name"
9+
android:roundIcon="@mipmap/ic_launcher_round"
10+
android:supportsRtl="true"
11+
android:theme="@style/Theme.AppDistributionTestAppSample">
12+
<activity android:name="com.googletest.firebase.appdistribution.testapp.MainActivity">
13+
<intent-filter>
14+
<action android:name="android.intent.action.MAIN" />
1515

16-
<category android:name="android.intent.category.LAUNCHER" />
17-
</intent-filter>
18-
</activity>
19-
<activity android:name="com.googletest.firebase.appdistribution.testapp.SecondActivity" >
20-
</activity>
21-
</application>
16+
<category android:name="android.intent.category.LAUNCHER" />
17+
</intent-filter>
18+
</activity>
19+
<activity android:name="com.googletest.firebase.appdistribution.testapp.SecondActivity"></activity>
20+
</application>
2221

2322
</manifest>
Lines changed: 181 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,60 @@
11
package com.googletest.firebase.appdistribution.testapp
22

3+
import android.app.AlertDialog
34
import android.content.Intent
5+
import android.os.Build
46
import android.os.Bundle
57
import android.util.Log
68
import android.view.View
79
import android.widget.ProgressBar
810
import android.widget.TextView
911
import androidx.appcompat.app.AppCompatActivity
1012
import androidx.appcompat.widget.AppCompatButton
13+
import com.google.android.gms.tasks.Task
1114
import com.google.firebase.appdistribution.AppDistributionRelease
1215
import com.google.firebase.appdistribution.FirebaseAppDistribution
13-
import com.google.firebase.appdistribution.FirebaseAppDistributionException as FirebaseAppDistributionException1
16+
import com.google.firebase.appdistribution.UpdateProgress
17+
import java.util.concurrent.ExecutorService
18+
import java.util.concurrent.Executors
1419

1520
class MainActivity : AppCompatActivity() {
1621
var firebaseAppDistribution: FirebaseAppDistribution = FirebaseAppDistribution.getInstance()
22+
var updateTask: Task<Void>? = null
23+
var release: AppDistributionRelease? = null
24+
val executorService: ExecutorService = Executors.newFixedThreadPool(1)
25+
lateinit var signInButton: AppCompatButton
26+
lateinit var signOutButton: AppCompatButton
27+
lateinit var checkForUpdateButton: AppCompatButton
28+
lateinit var updateAppButton: AppCompatButton
29+
lateinit var updateIfNewReleaseAvailableButton: AppCompatButton
30+
lateinit var updateIfNewReleaseAvailableButtonBackground: AppCompatButton
31+
lateinit var signInButtonBackground: AppCompatButton
32+
lateinit var signOutButtonBackground: AppCompatButton
33+
lateinit var checkForUpdateButtonBackground: AppCompatButton
34+
lateinit var updateAppButtonBackground: AppCompatButton
35+
lateinit var progressPercentage: TextView
36+
lateinit var signInStatus: TextView
37+
lateinit var progressPercent: TextView
38+
lateinit var progressBar: ProgressBar
1739

1840
override fun onCreate(savedInstanceState: Bundle?) {
1941
super.onCreate(savedInstanceState)
2042
setContentView(R.layout.activity_main)
43+
signInButton = findViewById<AppCompatButton>(R.id.sign_in_button)
44+
signOutButton = findViewById<AppCompatButton>(R.id.sign_out)
45+
checkForUpdateButton = findViewById<AppCompatButton>(R.id.check_for_update)
46+
updateAppButton = findViewById<AppCompatButton>(R.id.update_app)
47+
updateIfNewReleaseAvailableButton = findViewById<AppCompatButton>(R.id.basic_config)
48+
updateIfNewReleaseAvailableButtonBackground =
49+
findViewById<AppCompatButton>(R.id.basic_config2)
50+
signInButtonBackground = findViewById<AppCompatButton>(R.id.sign_in_button2)
51+
signOutButtonBackground = findViewById<AppCompatButton>(R.id.sign_out2)
52+
checkForUpdateButtonBackground = findViewById<AppCompatButton>(R.id.check_for_update2)
53+
updateAppButtonBackground = findViewById<AppCompatButton>(R.id.update_app2)
54+
progressPercentage = findViewById<TextView>(R.id.progress_percentage)
55+
signInStatus = findViewById<TextView>(R.id.sign_in_status)
56+
progressPercent = findViewById<TextView>(R.id.progress_percentage)
57+
progressBar = findViewById<ProgressBar>(R.id.progress_bar)
2158
}
2259

2360
override fun onResume() {
@@ -26,108 +63,169 @@ class MainActivity : AppCompatActivity() {
2663
"Sample App v${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})"
2764
setupUI(isSignedIn = firebaseAppDistribution.isTesterSignedIn, isUpdateAvailable = false)
2865

29-
/** Basic Configuration */
30-
findViewById<AppCompatButton>(R.id.sign_in_button).visibility = View.GONE
31-
findViewById<AppCompatButton>(R.id.check_for_update).visibility = View.GONE
32-
findViewById<AppCompatButton>(R.id.sign_out).visibility = View.GONE
66+
/** Button Listeners */
67+
updateIfNewReleaseAvailableButton.setOnClickListener {
68+
if (updateTask == null || updateTask?.isComplete == true) {
69+
updateTask =
70+
firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener() {
71+
failureListener(it)
72+
}
73+
}
74+
}
3375

34-
firebaseAppDistribution.updateIfNewReleaseAvailable()
35-
.addOnSuccessListener {
36-
firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener {
37-
val ex = it as FirebaseAppDistributionException1
38-
Log.d("FirebaseAppDistribution", "MAINACTIVITY:ERROR ERROR. CODE: " + it.errorCode)
76+
updateIfNewReleaseAvailableButtonBackground.setOnClickListener {
77+
executorService.execute {
78+
if (updateTask == null || updateTask?.isComplete == true) {
79+
updateTask =
80+
firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener {
81+
failureListener(it)
82+
}
3983
}
4084
}
85+
}
86+
87+
signInButton.setOnClickListener {
88+
firebaseAppDistribution
89+
.signInTester()
90+
.addOnSuccessListener {
91+
setupUI(
92+
isSignedIn = firebaseAppDistribution.isTesterSignedIn,
93+
isUpdateAvailable = false)
94+
}
95+
.addOnFailureListener { failureListener(it) }
96+
}
97+
98+
signInButtonBackground.setOnClickListener {
99+
executorService.execute {
100+
firebaseAppDistribution
101+
.signInTester()
102+
.addOnSuccessListener {}
103+
.addOnFailureListener { failureListener(it) }
104+
}
105+
setupUI(
106+
isSignedIn = firebaseAppDistribution.isTesterSignedIn, isUpdateAvailable = false)
107+
}
108+
109+
checkForUpdateButton.setOnClickListener {
110+
firebaseAppDistribution
111+
.checkForNewRelease()
112+
.addOnSuccessListener {
113+
setupUI(
114+
isSignedIn = firebaseAppDistribution.isTesterSignedIn,
115+
isUpdateAvailable = it != null,
116+
release = it)
117+
}
118+
.addOnFailureListener { failureListener(it) }
119+
}
120+
121+
checkForUpdateButtonBackground.setOnClickListener {
122+
executorService.execute {
123+
firebaseAppDistribution
124+
.checkForNewRelease()
125+
.addOnSuccessListener { release = it }
126+
.addOnFailureListener { failureListener(it) }
127+
}
128+
setupUI(
129+
isSignedIn = firebaseAppDistribution.isTesterSignedIn,
130+
isUpdateAvailable = release != null,
131+
release = release)
132+
}
133+
134+
signOutButton.setOnClickListener {
135+
firebaseAppDistribution.signOutTester()
136+
setupUI(
137+
isSignedIn = firebaseAppDistribution.isTesterSignedIn, isUpdateAvailable = false)
138+
}
139+
140+
signOutButtonBackground.setOnClickListener {
141+
executorService.execute { firebaseAppDistribution.signOutTester() }
142+
143+
setupUI(
144+
isSignedIn = firebaseAppDistribution.isTesterSignedIn, isUpdateAvailable = false)
145+
}
146+
147+
updateAppButton.setOnClickListener {
148+
setProgressBar()
149+
firebaseAppDistribution
150+
.updateApp()
151+
.addOnProgressListener { progressListener(it) }
152+
.addOnCanceledListener {
153+
setupUI(
154+
isSignedIn = firebaseAppDistribution.isTesterSignedIn,
155+
isUpdateAvailable = false)
156+
}
157+
}
41158

42-
// Start the second activity
43-
// Handler().postDelayed(Runnable {
44-
// startSecondActivity()
45-
// }, 5000)
46-
47-
/** Advanced Configuration */
48-
// val signInButton = findViewById<AppCompatButton>(R.id.sign_in_button)
49-
// val checkForUpdateButton = findViewById<AppCompatButton>(R.id.check_for_update)
50-
// val updateAppButton = findViewById<AppCompatButton>(R.id.update_app)
51-
// val signOutButton = findViewById<AppCompatButton>(R.id.sign_out)
52-
//
53-
// signOutButton.setOnClickListener {
54-
// firebaseAppDistribution.signOutTester()
55-
// setupUI(
56-
// isSignedIn = firebaseAppDistribution.isTesterSignedIn,
57-
// isUpdateAvailable = false
58-
// )
59-
// }
60-
//
61-
// signInButton.setOnClickListener {
62-
// firebaseAppDistribution.signInTester().addOnSuccessListener {
63-
// setupUI(isSignedIn = true, isUpdateAvailable = false)
64-
// }
65-
// }
66-
//
67-
// checkForUpdateButton.setOnClickListener {
68-
// firebaseAppDistribution.checkForNewRelease().addOnSuccessListener {
69-
// setupUI(isSignedIn = true, isUpdateAvailable = it != null, release = it)
70-
// }
71-
// }
72-
//
73-
// updateAppButton.setOnClickListener {
74-
// val progressBar = findViewById<ProgressBar>(R.id.progress_bar)
75-
// val progressPercent = findViewById<TextView>(R.id.progress_percentage)
76-
// progressBar.visibility = View.VISIBLE
77-
// progressPercent.visibility = View.VISIBLE
78-
// progressBar.isIndeterminate = false
79-
// firebaseAppDistribution.updateApp().addOnProgressListener {
80-
// progressBar.isIndeterminate = false
81-
// val percentage = ((it.apkBytesDownloaded * 100) / it.apkFileTotalBytes).toInt()
82-
// progressBar.setProgress(percentage, true)
83-
// progressPercent.text = "$percentage %"
84-
// }
85-
// }
159+
updateAppButtonBackground.setOnClickListener {
160+
setProgressBar()
161+
executorService.execute {
162+
firebaseAppDistribution.updateApp().addOnProgressListener { progressListener(it) }
163+
}
164+
}
86165
}
87166

88167
fun startSecondActivity() {
89168
val intent = Intent(this, SecondActivity::class.java)
90169
startActivity(intent)
91170
}
92171

172+
fun setProgressBar() {
173+
progressBar.visibility = View.VISIBLE
174+
progressPercent.visibility = View.VISIBLE
175+
progressBar.isIndeterminate = false
176+
}
177+
178+
fun failureListener(exception: Exception) {
179+
val ex = exception as com.google.firebase.appdistribution.FirebaseAppDistributionException
180+
Log.d("FirebaseAppDistribution", "MAINACTIVITY:ERROR ERROR. CODE: " + exception.errorCode)
181+
AlertDialog.Builder(this)
182+
.setTitle("Error updating to new release")
183+
.setMessage("${ex.message}: ${ex.errorCode}")
184+
.setNeutralButton("Okay") { dialog, _ -> dialog.dismiss() }
185+
.show()
186+
}
187+
188+
fun progressListener(updateProgress: UpdateProgress) {
189+
val percentage =
190+
((updateProgress.apkBytesDownloaded * 100) / updateProgress.apkFileTotalBytes).toInt()
191+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
192+
progressBar.setProgress(percentage, true)
193+
}
194+
progressPercent.text = "$percentage %"
195+
}
196+
93197
private fun setupUI(
94198
isSignedIn: Boolean,
95199
isUpdateAvailable: Boolean,
96200
release: AppDistributionRelease? = null
97201
) {
98-
val signInStatus = findViewById<TextView>(R.id.sign_in_status)
99-
val signInButton = findViewById<AppCompatButton>(R.id.sign_in_button)
100-
val checkForUpdateButton = findViewById<AppCompatButton>(R.id.check_for_update)
101-
val updateAppButton = findViewById<AppCompatButton>(R.id.update_app)
102-
val progressBar = findViewById<ProgressBar>(R.id.progress_bar)
103-
val progressPercentage = findViewById<TextView>(R.id.progress_percentage)
104-
105-
if (!isSignedIn) {
106-
signInStatus.text = "Not Signed In"
107-
signInButton.visibility = View.VISIBLE
108-
checkForUpdateButton.visibility = View.GONE
109-
updateAppButton.visibility = View.GONE
110-
progressBar.visibility = View.GONE
111-
progressPercentage.visibility = View.GONE
112-
return
113-
}
114-
115-
if (isSignedIn && !isUpdateAvailable) {
116-
signInStatus.text = "Tester signed In!"
202+
progressBar.visibility = View.GONE
203+
progressPercentage.visibility = View.GONE
204+
if (isUpdateAvailable) {
205+
signInStatus.text =
206+
"Release available - ${release?.displayVersion} (${release?.versionCode})"
117207
signInButton.visibility = View.GONE
118-
checkForUpdateButton.visibility = View.VISIBLE
119-
updateAppButton.visibility = View.GONE
208+
signInButtonBackground.visibility = View.GONE
209+
checkForUpdateButton.visibility = View.GONE
210+
checkForUpdateButtonBackground.visibility = View.GONE
211+
updateAppButton.visibility = View.VISIBLE
212+
updateAppButtonBackground.visibility = View.VISIBLE
213+
signOutButton.visibility = View.VISIBLE
120214
progressBar.visibility = View.GONE
121-
progressPercentage.visibility = View.GONE
215+
signOutButtonBackground.visibility = View.VISIBLE
122216
return
123217
}
124218

125-
signInStatus.text =
126-
"Release available - ${release?.displayVersion} (${release?.versionCode})"
127-
signInButton.visibility = View.GONE
128-
checkForUpdateButton.visibility = View.GONE
129-
updateAppButton.visibility = View.VISIBLE
130-
progressBar.visibility = View.GONE
131-
progressPercentage.visibility = View.GONE
219+
signInStatus.text = if (isSignedIn) "Tester signed In!" else "Not Signed In"
220+
signInButton.visibility = if (isSignedIn) View.GONE else View.VISIBLE
221+
signInButtonBackground.visibility = if (isSignedIn) View.GONE else View.VISIBLE
222+
signOutButton.visibility = if (isSignedIn) View.VISIBLE else View.GONE
223+
signOutButtonBackground.visibility = if (isSignedIn) View.VISIBLE else View.GONE
224+
checkForUpdateButton.visibility = if (isSignedIn) View.VISIBLE else View.GONE
225+
checkForUpdateButtonBackground.visibility = if (isSignedIn) View.VISIBLE else View.GONE
226+
updateAppButton.visibility = if (isSignedIn) View.VISIBLE else View.GONE
227+
updateAppButtonBackground.visibility = if (isSignedIn) View.VISIBLE else View.GONE
228+
updateAppButton.visibility = View.GONE
229+
updateAppButtonBackground.visibility = View.GONE
132230
}
133231
}

0 commit comments

Comments
 (0)