1
1
package com.googletest.firebase.appdistribution.testapp
2
2
3
+ import android.app.AlertDialog
3
4
import android.content.Intent
5
+ import android.os.Build
4
6
import android.os.Bundle
5
7
import android.util.Log
6
8
import android.view.View
7
9
import android.widget.ProgressBar
8
10
import android.widget.TextView
9
11
import androidx.appcompat.app.AppCompatActivity
10
12
import androidx.appcompat.widget.AppCompatButton
13
+ import com.google.android.gms.tasks.Task
11
14
import com.google.firebase.appdistribution.AppDistributionRelease
12
15
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
14
19
15
20
class MainActivity : AppCompatActivity () {
16
21
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
17
39
18
40
override fun onCreate (savedInstanceState : Bundle ? ) {
19
41
super .onCreate(savedInstanceState)
20
42
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)
21
58
}
22
59
23
60
override fun onResume () {
@@ -26,108 +63,169 @@ class MainActivity : AppCompatActivity() {
26
63
" Sample App v${BuildConfig .VERSION_NAME } (${BuildConfig .VERSION_CODE } )"
27
64
setupUI(isSignedIn = firebaseAppDistribution.isTesterSignedIn, isUpdateAvailable = false )
28
65
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
+ }
33
75
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
+ }
39
83
}
40
84
}
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
+ }
41
158
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
+ }
86
165
}
87
166
88
167
fun startSecondActivity () {
89
168
val intent = Intent (this , SecondActivity ::class .java)
90
169
startActivity(intent)
91
170
}
92
171
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
+
93
197
private fun setupUI (
94
198
isSignedIn : Boolean ,
95
199
isUpdateAvailable : Boolean ,
96
200
release : AppDistributionRelease ? = null
97
201
) {
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} )"
117
207
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
120
214
progressBar.visibility = View .GONE
121
- progressPercentage .visibility = View .GONE
215
+ signOutButtonBackground .visibility = View .VISIBLE
122
216
return
123
217
}
124
218
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
132
230
}
133
231
}
0 commit comments