Skip to content

Commit 06f935a

Browse files
authored
Flash first flow (#65)
1 parent 30ac80f commit 06f935a

26 files changed

+1656
-475
lines changed

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ android {
3333
}
3434

3535
dependencies {
36+
implementation 'androidx.lifecycle:lifecycle-process:2.7.0'
3637
testImplementation 'junit:junit:4.12'
3738
implementation 'androidx.appcompat:appcompat:1.6.1'
3839
implementation 'com.google.android.material:material:1.11.0'

app/src/main/java/com/samsung/microbit/MBApp.java

Lines changed: 61 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,31 @@
11
package com.samsung.microbit;
22

3+
import static com.samsung.microbit.BuildConfig.DEBUG;
4+
35
import android.app.Application;
46
import android.graphics.Typeface;
57
import android.util.Log;
68

9+
import androidx.annotation.NonNull;
10+
import androidx.lifecycle.DefaultLifecycleObserver;
11+
import androidx.lifecycle.LifecycleOwner;
12+
import androidx.lifecycle.ProcessLifecycleOwner;
13+
14+
import com.samsung.microbit.MBAppState;
15+
716
/**
817
* Represents a custom class of the app.
918
* Provides some resources that use along app modules,
1019
* such as app context, font styles and etc.
1120
*/
12-
public class MBApp extends Application {
21+
public class MBApp extends Application implements DefaultLifecycleObserver {
22+
private static final String TAG = MBApp.class.getSimpleName();
23+
24+
public void logi(String message) {
25+
if ( DEBUG) {
26+
Log.i(TAG, "### " + Thread.currentThread().getId() + " # " + message);
27+
}
28+
}
1329

1430
private static MBApp app = null;
1531

@@ -19,12 +35,15 @@ public class MBApp extends Application {
1935

2036
private boolean justPaired;
2137

38+
private MBAppState appState = new MBAppState();
39+
2240
@Override
2341
public void onCreate() {
2442
super.onCreate();
2543
app = this;
44+
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
2645
initTypefaces();
27-
46+
appState.prefsLoad();
2847
Log.d("MBApp", "App Created");
2948
}
3049

@@ -61,4 +80,43 @@ public static MBApp getApp() {
6180
return app;
6281
}
6382

64-
}
83+
public static MBAppState getAppState() {
84+
return app.appState;
85+
}
86+
87+
@Override
88+
public void onCreate(@NonNull LifecycleOwner owner) {
89+
logi("onCreate");
90+
MBApp.getAppState().eventPairForeground();
91+
}
92+
93+
@Override
94+
public void onStart(@NonNull LifecycleOwner owner) {
95+
logi("onStart");
96+
MBApp.getAppState().eventPairForeground();
97+
}
98+
99+
@Override
100+
public void onResume(@NonNull LifecycleOwner owner) {
101+
logi("onResume");
102+
MBApp.getAppState().eventPairForeground();
103+
}
104+
105+
@Override
106+
public void onPause(@NonNull LifecycleOwner owner) {
107+
logi("onPause");
108+
MBApp.getAppState().eventPairBackground();
109+
}
110+
111+
@Override
112+
public void onStop(@NonNull LifecycleOwner owner) {
113+
logi("onStop");
114+
MBApp.getAppState().eventPairBackground();
115+
}
116+
117+
@Override
118+
public void onDestroy(@NonNull LifecycleOwner owner) {
119+
logi("onDestroy");
120+
MBApp.getAppState().eventPairBackground();
121+
}
122+
}
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
package com.samsung.microbit;
2+
3+
import static com.samsung.microbit.BuildConfig.DEBUG;
4+
5+
import android.content.Context;
6+
import android.content.SharedPreferences;
7+
import android.util.Log;
8+
9+
import com.samsung.microbit.MBApp;
10+
import com.samsung.microbit.core.bluetooth.BluetoothUtils;
11+
import com.samsung.microbit.data.constants.Constants;
12+
import com.samsung.microbit.data.model.ConnectedDevice;
13+
14+
public class MBAppState {
15+
private static final String TAG = MBAppState.class.getSimpleName();
16+
17+
public void logi(String message) {
18+
if ( DEBUG) {
19+
Log.i(TAG, "### " + Thread.currentThread().getId() + " # " + message);
20+
}
21+
}
22+
23+
public enum PairState {
24+
PairStateNone,
25+
PairStateError,
26+
PairStateLaunch,
27+
PairStateSession,
28+
PairStateChecked
29+
}
30+
31+
public boolean pairStateLaunch;
32+
public boolean pairStateSession;
33+
public boolean pairStateError;
34+
public boolean pairStateMakeCode;
35+
public boolean pairStateResetTriple;
36+
37+
public MBAppState() {
38+
pairStateLaunch = true;
39+
pairStateSession = true;
40+
pairStateError = false;
41+
pairStateMakeCode = false;
42+
pairStateResetTriple = true;
43+
}
44+
45+
public PairState pairState() {
46+
PairState ps = PairState.PairStateChecked;
47+
48+
if ( !BluetoothUtils.getCurrentMicrobitIsValid( MBApp.getApp()))
49+
ps = PairState.PairStateNone;
50+
else if ( pairStateError)
51+
ps = PairState.PairStateError;
52+
else if ( pairStateLaunch)
53+
ps = PairState.PairStateLaunch;
54+
else if ( pairStateSession)
55+
ps = PairState.PairStateSession;
56+
else
57+
ps = PairState.PairStateChecked;
58+
59+
logi( "pairState " + ps);
60+
return ps;
61+
}
62+
63+
public void eventPairSuccess() {
64+
logi( "eventPairSuccess");
65+
pairStateLaunch = false;
66+
pairStateSession = false;
67+
pairStateError = false;
68+
prefsSave();
69+
}
70+
71+
public void eventPairChecked() {
72+
logi( "eventPairChecked");
73+
pairStateLaunch = false;
74+
pairStateSession = false;
75+
}
76+
77+
public void eventPairDifferent() {
78+
logi( "eventPairDifferent");
79+
pairStateSession = true;
80+
}
81+
82+
public void eventPairBackground() {
83+
logi( "eventPairBackground");
84+
if ( !pairStateMakeCode)
85+
pairStateSession = true;
86+
}
87+
88+
public void eventPairForeground() {
89+
logi( "eventPairForeground");
90+
if ( !pairStateMakeCode)
91+
pairStateSession = true;
92+
}
93+
94+
public void eventPairError() {
95+
logi( "eventPairError");
96+
pairStateError = true;
97+
prefsSave();
98+
}
99+
100+
public void eventPairMakeCodeBegin() {
101+
logi( "eventPairMakeCodeBegin");
102+
pairStateSession = true;
103+
pairStateMakeCode = true;
104+
}
105+
106+
public void eventPairMakeCodeEnd() {
107+
logi( "eventPairMakeCodeEnd");
108+
pairStateMakeCode = false;
109+
}
110+
111+
public void eventPairSendError() {
112+
logi( "eventPairSendError");
113+
pairStateError = true;
114+
prefsSave();
115+
}
116+
117+
public void eventPairResetTriple( boolean yes)
118+
{
119+
logi( "eventPairResetTriple " + yes);
120+
pairStateResetTriple = yes;
121+
prefsSave();
122+
}
123+
124+
public void eventPairResetMethodCheck( ConnectedDevice device)
125+
{
126+
logi( "eventPairResetMethodCheck");
127+
if ( device != null && device.mPattern != null)
128+
{
129+
if ( device.mhardwareVersion == 1) // MICROBIT_V1
130+
{
131+
eventPairResetTriple( false);
132+
return;
133+
}
134+
}
135+
eventPairResetTriple( true);
136+
}
137+
138+
public static final String PREFERENCES_pairStateError = "Preferences.pairStateError";
139+
public static final String PREFERENCES_pairStateResetTriple = "Preferences.pairStateResetTriple";
140+
141+
public void prefsLoad()
142+
{
143+
Context ctx = MBApp.getApp();
144+
SharedPreferences prefs = ctx.getSharedPreferences(Constants.PREFERENCES, Context.MODE_MULTI_PROCESS);
145+
if ( prefs == null) {
146+
logi( "prefsLoad failed");
147+
return;
148+
}
149+
pairStateError = prefs.getBoolean( PREFERENCES_pairStateError, pairStateError);
150+
pairStateResetTriple = prefs.getBoolean( PREFERENCES_pairStateResetTriple, pairStateResetTriple);
151+
}
152+
153+
public void prefsSave()
154+
{
155+
Context ctx = MBApp.getApp();
156+
SharedPreferences prefs = ctx.getSharedPreferences(Constants.PREFERENCES, Context.MODE_MULTI_PROCESS);
157+
SharedPreferences.Editor prefsEdit = prefs == null ? null: prefs.edit();
158+
if ( prefsEdit == null) {
159+
logi( "prefsSave failed");
160+
return;
161+
}
162+
prefsEdit.putBoolean( PREFERENCES_pairStateError, pairStateError);
163+
prefsEdit.putBoolean( PREFERENCES_pairStateResetTriple, pairStateResetTriple);
164+
prefsEdit.apply();
165+
}
166+
}

app/src/main/java/com/samsung/microbit/core/bluetooth/BLEManager.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -776,15 +776,13 @@ public void onServicesDiscovered(BluetoothGatt gatt, int status) {
776776
}
777777

778778
if(status == BluetoothGatt.GATT_SUCCESS) {
779-
ConnectedDevice cD = BluetoothUtils.getPairedMicrobit(MBApp.getApp());
780779
if(gatt.getService(UUID.fromString("0000fe59-0000-1000-8000-00805f9b34fb")) != null ) {
781780
Log.v(TAG, "Hardware Type: V2");
782-
cD.mhardwareVersion = 2;
781+
BluetoothUtils.setCurrentMicrobitHardwareVersion(MBApp.getApp(), 2);
783782
} else {
784783
Log.v(TAG, "Hardware Type: V1");
785-
cD.mhardwareVersion = 1;
784+
BluetoothUtils.setCurrentMicrobitHardwareVersion(MBApp.getApp(), 1);
786785
}
787-
BluetoothUtils.setPairedMicroBit(MBApp.getApp(), cD);
788786
bleState |= state;
789787
} else {
790788
bleState &= (~state);

0 commit comments

Comments
 (0)