Skip to content

Commit 06fe78e

Browse files
author
rachaprince
authored
Create test app for dev and instrumentation tests (#3312)
* Create test app for dev and instrumentation tests * move test-app directory
1 parent adaa1df commit 06fe78e

File tree

24 files changed

+601
-0
lines changed

24 files changed

+601
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Firebase App Distribution Test App
2+
3+
## Setup
4+
5+
Download the `google-services.json` file from [Firebase Console](https://console.firebase.google.com/)
6+
(for whatever Firebase project you have or want to integrate the `dev-app`) and store it under the
7+
current directory.
8+
9+
<p align="center">
10+
<img src="https://i.stack.imgur.com/BFmz5.png">
11+
</p>
12+
13+
> **Note:** The [Package name](https://firebase.google.com/docs/android/setup#register-app) for your
14+
app created on the Firebase Console (for which the `google-services.json` is downloaded) must match
15+
the [applicationId](https://developer.android.com/studio/build/application-id.html) declared in the
16+
`dev-app/dev-app.gradle` for the app to link to Firebase.
17+
18+
## Build & Install
19+
20+
### Build with HEAD version of `firebase-appdistribution` SDK.
21+
22+
```
23+
firebase-android-sdk$ ./gradlew :clean :firebase-appdistribution:test-app:build
24+
```
25+
26+
After the build is successful, [bring up emulator/physical device](https://developer.android.com/studio/run/emulator)
27+
and install the apk:
28+
29+
```
30+
firebase-android-sdk$ adb install firebase-app-distribution/test-app/build/outputs/apk/release/test-app-release.apk
31+
```
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
package="com.googletest.firebase.appdistribution.testapp" >
4+
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" />
15+
16+
<category android:name="android.intent.category.LAUNCHER" />
17+
</intent-filter>
18+
</activity>
19+
</application>
20+
21+
</manifest>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
package com.googletest.firebase.appdistribution.testapp
2+
3+
import android.os.Bundle
4+
import android.util.Log
5+
import android.view.View
6+
import android.widget.ProgressBar
7+
import android.widget.TextView
8+
import androidx.appcompat.app.AppCompatActivity
9+
import androidx.appcompat.widget.AppCompatButton
10+
import com.google.firebase.appdistribution.AppDistributionRelease
11+
import com.google.firebase.appdistribution.FirebaseAppDistribution
12+
import com.google.firebase.appdistribution.FirebaseAppDistributionException
13+
14+
class MainActivity : AppCompatActivity() {
15+
var firebaseAppDistribution: FirebaseAppDistribution = FirebaseAppDistribution.getInstance()
16+
17+
override fun onCreate(savedInstanceState: Bundle?) {
18+
super.onCreate(savedInstanceState)
19+
setContentView(R.layout.activity_main)
20+
}
21+
22+
override fun onResume() {
23+
super.onResume()
24+
findViewById<TextView>(R.id.app_name).text = "Sample App v${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})"
25+
setupUI(isSignedIn = firebaseAppDistribution.isTesterSignedIn, isUpdateAvailable = false)
26+
27+
/** Basic Configuration */
28+
findViewById<AppCompatButton>(R.id.sign_in_button).visibility = View.GONE
29+
findViewById<AppCompatButton>(R.id.check_for_update).visibility = View.GONE
30+
findViewById<AppCompatButton>(R.id.sign_out).visibility = View.GONE
31+
32+
firebaseAppDistribution.updateIfNewReleaseAvailable()
33+
.addOnSuccessListener {
34+
firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener {
35+
val ex = it as FirebaseAppDistributionException
36+
Log.d("FirebaseAppDistribution", "MAINACTIVITY:ERROR ERROR. CODE: " + it.errorCode)
37+
}
38+
}
39+
40+
/** Advanced Configuration */
41+
// val signInButton = findViewById<AppCompatButton>(R.id.sign_in_button)
42+
// val checkForUpdateButton = findViewById<AppCompatButton>(R.id.check_for_update)
43+
// val updateAppButton = findViewById<AppCompatButton>(R.id.update_app)
44+
// val signOutButton = findViewById<AppCompatButton>(R.id.sign_out)
45+
//
46+
// signOutButton.setOnClickListener {
47+
// firebaseAppDistribution.signOutTester()
48+
// setupUI(isSignedIn = firebaseAppDistribution.isTesterSignedIn, isUpdateAvailable = false)
49+
// }
50+
//
51+
// signInButton.setOnClickListener {
52+
// firebaseAppDistribution.signInTester().addOnSuccessListener {
53+
// setupUI(isSignedIn = true, isUpdateAvailable = false)
54+
// }
55+
// }
56+
//
57+
// checkForUpdateButton.setOnClickListener {
58+
// firebaseAppDistribution.checkForNewRelease().addOnSuccessListener {
59+
// setupUI(isSignedIn = true, isUpdateAvailable = it != null, release = it)
60+
// }
61+
// }
62+
//
63+
// updateAppButton.setOnClickListener {
64+
// val progressBar = findViewById<ProgressBar>(R.id.progress_bar)
65+
// val progressPercent = findViewById<TextView>(R.id.progress_percentage)
66+
// progressBar.visibility = View.VISIBLE
67+
// progressPercent.visibility = View.VISIBLE
68+
// progressBar.isIndeterminate = false
69+
// firebaseAppDistribution.updateApp().addOnProgressListener {
70+
// progressBar.isIndeterminate = false
71+
// val percentage = ((it.apkBytesDownloaded * 100)/ it.apkFileTotalBytes).toInt()
72+
// progressBar.setProgress(percentage, true)
73+
// progressPercent.text = "$percentage %"
74+
// }
75+
// }
76+
}
77+
78+
private fun setupUI(isSignedIn: Boolean, isUpdateAvailable: Boolean, release: AppDistributionRelease? = null) {
79+
val signInStatus = findViewById<TextView>(R.id.sign_in_status)
80+
val signInButton = findViewById<AppCompatButton>(R.id.sign_in_button)
81+
val checkForUpdateButton = findViewById<AppCompatButton>(R.id.check_for_update)
82+
val updateAppButton = findViewById<AppCompatButton>(R.id.update_app)
83+
val progressBar = findViewById<ProgressBar>(R.id.progress_bar)
84+
val progressPercentage = findViewById<TextView>(R.id.progress_percentage)
85+
86+
if (!isSignedIn) {
87+
signInStatus.text = "Not Signed In"
88+
signInButton.visibility = View.VISIBLE
89+
checkForUpdateButton.visibility = View.GONE
90+
updateAppButton.visibility = View.GONE
91+
progressBar.visibility = View.GONE
92+
progressPercentage.visibility = View.GONE
93+
return
94+
}
95+
96+
if (isSignedIn && !isUpdateAvailable) {
97+
signInStatus.text = "Tester signed In!"
98+
signInButton.visibility = View.GONE
99+
checkForUpdateButton.visibility = View.VISIBLE
100+
updateAppButton.visibility = View.GONE
101+
progressBar.visibility = View.GONE
102+
progressPercentage.visibility = View.GONE
103+
return
104+
}
105+
106+
signInStatus.text = "Release available - ${release?.displayVersion} (${release?.versionCode})"
107+
signInButton.visibility = View.GONE
108+
checkForUpdateButton.visibility = View.GONE
109+
updateAppButton.visibility = View.VISIBLE
110+
progressBar.visibility = View.GONE
111+
progressPercentage.visibility = View.GONE
112+
}
113+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
xmlns:aapt="http://schemas.android.com/aapt"
3+
android:width="108dp"
4+
android:height="108dp"
5+
android:viewportWidth="108"
6+
android:viewportHeight="108">
7+
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
8+
<aapt:attr name="android:fillColor">
9+
<gradient
10+
android:endX="85.84757"
11+
android:endY="92.4963"
12+
android:startX="42.9492"
13+
android:startY="49.59793"
14+
android:type="linear">
15+
<item
16+
android:color="#44000000"
17+
android:offset="0.0" />
18+
<item
19+
android:color="#00000000"
20+
android:offset="1.0" />
21+
</gradient>
22+
</aapt:attr>
23+
</path>
24+
<path
25+
android:fillColor="#FFFFFF"
26+
android:fillType="nonZero"
27+
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
28+
android:strokeWidth="1"
29+
android:strokeColor="#00000000" />
30+
</vector>
Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:width="108dp"
4+
android:height="108dp"
5+
android:viewportWidth="108"
6+
android:viewportHeight="108">
7+
<path
8+
android:fillColor="#3DDC84"
9+
android:pathData="M0,0h108v108h-108z" />
10+
<path
11+
android:fillColor="#00000000"
12+
android:pathData="M9,0L9,108"
13+
android:strokeWidth="0.8"
14+
android:strokeColor="#33FFFFFF" />
15+
<path
16+
android:fillColor="#00000000"
17+
android:pathData="M19,0L19,108"
18+
android:strokeWidth="0.8"
19+
android:strokeColor="#33FFFFFF" />
20+
<path
21+
android:fillColor="#00000000"
22+
android:pathData="M29,0L29,108"
23+
android:strokeWidth="0.8"
24+
android:strokeColor="#33FFFFFF" />
25+
<path
26+
android:fillColor="#00000000"
27+
android:pathData="M39,0L39,108"
28+
android:strokeWidth="0.8"
29+
android:strokeColor="#33FFFFFF" />
30+
<path
31+
android:fillColor="#00000000"
32+
android:pathData="M49,0L49,108"
33+
android:strokeWidth="0.8"
34+
android:strokeColor="#33FFFFFF" />
35+
<path
36+
android:fillColor="#00000000"
37+
android:pathData="M59,0L59,108"
38+
android:strokeWidth="0.8"
39+
android:strokeColor="#33FFFFFF" />
40+
<path
41+
android:fillColor="#00000000"
42+
android:pathData="M69,0L69,108"
43+
android:strokeWidth="0.8"
44+
android:strokeColor="#33FFFFFF" />
45+
<path
46+
android:fillColor="#00000000"
47+
android:pathData="M79,0L79,108"
48+
android:strokeWidth="0.8"
49+
android:strokeColor="#33FFFFFF" />
50+
<path
51+
android:fillColor="#00000000"
52+
android:pathData="M89,0L89,108"
53+
android:strokeWidth="0.8"
54+
android:strokeColor="#33FFFFFF" />
55+
<path
56+
android:fillColor="#00000000"
57+
android:pathData="M99,0L99,108"
58+
android:strokeWidth="0.8"
59+
android:strokeColor="#33FFFFFF" />
60+
<path
61+
android:fillColor="#00000000"
62+
android:pathData="M0,9L108,9"
63+
android:strokeWidth="0.8"
64+
android:strokeColor="#33FFFFFF" />
65+
<path
66+
android:fillColor="#00000000"
67+
android:pathData="M0,19L108,19"
68+
android:strokeWidth="0.8"
69+
android:strokeColor="#33FFFFFF" />
70+
<path
71+
android:fillColor="#00000000"
72+
android:pathData="M0,29L108,29"
73+
android:strokeWidth="0.8"
74+
android:strokeColor="#33FFFFFF" />
75+
<path
76+
android:fillColor="#00000000"
77+
android:pathData="M0,39L108,39"
78+
android:strokeWidth="0.8"
79+
android:strokeColor="#33FFFFFF" />
80+
<path
81+
android:fillColor="#00000000"
82+
android:pathData="M0,49L108,49"
83+
android:strokeWidth="0.8"
84+
android:strokeColor="#33FFFFFF" />
85+
<path
86+
android:fillColor="#00000000"
87+
android:pathData="M0,59L108,59"
88+
android:strokeWidth="0.8"
89+
android:strokeColor="#33FFFFFF" />
90+
<path
91+
android:fillColor="#00000000"
92+
android:pathData="M0,69L108,69"
93+
android:strokeWidth="0.8"
94+
android:strokeColor="#33FFFFFF" />
95+
<path
96+
android:fillColor="#00000000"
97+
android:pathData="M0,79L108,79"
98+
android:strokeWidth="0.8"
99+
android:strokeColor="#33FFFFFF" />
100+
<path
101+
android:fillColor="#00000000"
102+
android:pathData="M0,89L108,89"
103+
android:strokeWidth="0.8"
104+
android:strokeColor="#33FFFFFF" />
105+
<path
106+
android:fillColor="#00000000"
107+
android:pathData="M0,99L108,99"
108+
android:strokeWidth="0.8"
109+
android:strokeColor="#33FFFFFF" />
110+
<path
111+
android:fillColor="#00000000"
112+
android:pathData="M19,29L89,29"
113+
android:strokeWidth="0.8"
114+
android:strokeColor="#33FFFFFF" />
115+
<path
116+
android:fillColor="#00000000"
117+
android:pathData="M19,39L89,39"
118+
android:strokeWidth="0.8"
119+
android:strokeColor="#33FFFFFF" />
120+
<path
121+
android:fillColor="#00000000"
122+
android:pathData="M19,49L89,49"
123+
android:strokeWidth="0.8"
124+
android:strokeColor="#33FFFFFF" />
125+
<path
126+
android:fillColor="#00000000"
127+
android:pathData="M19,59L89,59"
128+
android:strokeWidth="0.8"
129+
android:strokeColor="#33FFFFFF" />
130+
<path
131+
android:fillColor="#00000000"
132+
android:pathData="M19,69L89,69"
133+
android:strokeWidth="0.8"
134+
android:strokeColor="#33FFFFFF" />
135+
<path
136+
android:fillColor="#00000000"
137+
android:pathData="M19,79L89,79"
138+
android:strokeWidth="0.8"
139+
android:strokeColor="#33FFFFFF" />
140+
<path
141+
android:fillColor="#00000000"
142+
android:pathData="M29,19L29,89"
143+
android:strokeWidth="0.8"
144+
android:strokeColor="#33FFFFFF" />
145+
<path
146+
android:fillColor="#00000000"
147+
android:pathData="M39,19L39,89"
148+
android:strokeWidth="0.8"
149+
android:strokeColor="#33FFFFFF" />
150+
<path
151+
android:fillColor="#00000000"
152+
android:pathData="M49,19L49,89"
153+
android:strokeWidth="0.8"
154+
android:strokeColor="#33FFFFFF" />
155+
<path
156+
android:fillColor="#00000000"
157+
android:pathData="M59,19L59,89"
158+
android:strokeWidth="0.8"
159+
android:strokeColor="#33FFFFFF" />
160+
<path
161+
android:fillColor="#00000000"
162+
android:pathData="M69,19L69,89"
163+
android:strokeWidth="0.8"
164+
android:strokeColor="#33FFFFFF" />
165+
<path
166+
android:fillColor="#00000000"
167+
android:pathData="M79,19L79,89"
168+
android:strokeWidth="0.8"
169+
android:strokeColor="#33FFFFFF" />
170+
</vector>

0 commit comments

Comments
 (0)