Skip to content

Commit

Permalink
Flash first flow (#65)
Browse files Browse the repository at this point in the history
  • Loading branch information
martinwork authored May 15, 2024
1 parent 30ac80f commit 06f935a
Show file tree
Hide file tree
Showing 26 changed files with 1,656 additions and 475 deletions.
1 change: 1 addition & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ android {
}

dependencies {
implementation 'androidx.lifecycle:lifecycle-process:2.7.0'
testImplementation 'junit:junit:4.12'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.11.0'
Expand Down
64 changes: 61 additions & 3 deletions app/src/main/java/com/samsung/microbit/MBApp.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,31 @@
package com.samsung.microbit;

import static com.samsung.microbit.BuildConfig.DEBUG;

import android.app.Application;
import android.graphics.Typeface;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ProcessLifecycleOwner;

import com.samsung.microbit.MBAppState;

/**
* Represents a custom class of the app.
* Provides some resources that use along app modules,
* such as app context, font styles and etc.
*/
public class MBApp extends Application {
public class MBApp extends Application implements DefaultLifecycleObserver {
private static final String TAG = MBApp.class.getSimpleName();

public void logi(String message) {
if ( DEBUG) {
Log.i(TAG, "### " + Thread.currentThread().getId() + " # " + message);
}
}

private static MBApp app = null;

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

private boolean justPaired;

private MBAppState appState = new MBAppState();

@Override
public void onCreate() {
super.onCreate();
app = this;
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
initTypefaces();

appState.prefsLoad();
Log.d("MBApp", "App Created");
}

Expand Down Expand Up @@ -61,4 +80,43 @@ public static MBApp getApp() {
return app;
}

}
public static MBAppState getAppState() {
return app.appState;
}

@Override
public void onCreate(@NonNull LifecycleOwner owner) {
logi("onCreate");
MBApp.getAppState().eventPairForeground();
}

@Override
public void onStart(@NonNull LifecycleOwner owner) {
logi("onStart");
MBApp.getAppState().eventPairForeground();
}

@Override
public void onResume(@NonNull LifecycleOwner owner) {
logi("onResume");
MBApp.getAppState().eventPairForeground();
}

@Override
public void onPause(@NonNull LifecycleOwner owner) {
logi("onPause");
MBApp.getAppState().eventPairBackground();
}

@Override
public void onStop(@NonNull LifecycleOwner owner) {
logi("onStop");
MBApp.getAppState().eventPairBackground();
}

@Override
public void onDestroy(@NonNull LifecycleOwner owner) {
logi("onDestroy");
MBApp.getAppState().eventPairBackground();
}
}
166 changes: 166 additions & 0 deletions app/src/main/java/com/samsung/microbit/MBAppState.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
package com.samsung.microbit;

import static com.samsung.microbit.BuildConfig.DEBUG;

import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;

import com.samsung.microbit.MBApp;
import com.samsung.microbit.core.bluetooth.BluetoothUtils;
import com.samsung.microbit.data.constants.Constants;
import com.samsung.microbit.data.model.ConnectedDevice;

public class MBAppState {
private static final String TAG = MBAppState.class.getSimpleName();

public void logi(String message) {
if ( DEBUG) {
Log.i(TAG, "### " + Thread.currentThread().getId() + " # " + message);
}
}

public enum PairState {
PairStateNone,
PairStateError,
PairStateLaunch,
PairStateSession,
PairStateChecked
}

public boolean pairStateLaunch;
public boolean pairStateSession;
public boolean pairStateError;
public boolean pairStateMakeCode;
public boolean pairStateResetTriple;

public MBAppState() {
pairStateLaunch = true;
pairStateSession = true;
pairStateError = false;
pairStateMakeCode = false;
pairStateResetTriple = true;
}

public PairState pairState() {
PairState ps = PairState.PairStateChecked;

if ( !BluetoothUtils.getCurrentMicrobitIsValid( MBApp.getApp()))
ps = PairState.PairStateNone;
else if ( pairStateError)
ps = PairState.PairStateError;
else if ( pairStateLaunch)
ps = PairState.PairStateLaunch;
else if ( pairStateSession)
ps = PairState.PairStateSession;
else
ps = PairState.PairStateChecked;

logi( "pairState " + ps);
return ps;
}

public void eventPairSuccess() {
logi( "eventPairSuccess");
pairStateLaunch = false;
pairStateSession = false;
pairStateError = false;
prefsSave();
}

public void eventPairChecked() {
logi( "eventPairChecked");
pairStateLaunch = false;
pairStateSession = false;
}

public void eventPairDifferent() {
logi( "eventPairDifferent");
pairStateSession = true;
}

public void eventPairBackground() {
logi( "eventPairBackground");
if ( !pairStateMakeCode)
pairStateSession = true;
}

public void eventPairForeground() {
logi( "eventPairForeground");
if ( !pairStateMakeCode)
pairStateSession = true;
}

public void eventPairError() {
logi( "eventPairError");
pairStateError = true;
prefsSave();
}

public void eventPairMakeCodeBegin() {
logi( "eventPairMakeCodeBegin");
pairStateSession = true;
pairStateMakeCode = true;
}

public void eventPairMakeCodeEnd() {
logi( "eventPairMakeCodeEnd");
pairStateMakeCode = false;
}

public void eventPairSendError() {
logi( "eventPairSendError");
pairStateError = true;
prefsSave();
}

public void eventPairResetTriple( boolean yes)
{
logi( "eventPairResetTriple " + yes);
pairStateResetTriple = yes;
prefsSave();
}

public void eventPairResetMethodCheck( ConnectedDevice device)
{
logi( "eventPairResetMethodCheck");
if ( device != null && device.mPattern != null)
{
if ( device.mhardwareVersion == 1) // MICROBIT_V1
{
eventPairResetTriple( false);
return;
}
}
eventPairResetTriple( true);
}

public static final String PREFERENCES_pairStateError = "Preferences.pairStateError";
public static final String PREFERENCES_pairStateResetTriple = "Preferences.pairStateResetTriple";

public void prefsLoad()
{
Context ctx = MBApp.getApp();
SharedPreferences prefs = ctx.getSharedPreferences(Constants.PREFERENCES, Context.MODE_MULTI_PROCESS);
if ( prefs == null) {
logi( "prefsLoad failed");
return;
}
pairStateError = prefs.getBoolean( PREFERENCES_pairStateError, pairStateError);
pairStateResetTriple = prefs.getBoolean( PREFERENCES_pairStateResetTriple, pairStateResetTriple);
}

public void prefsSave()
{
Context ctx = MBApp.getApp();
SharedPreferences prefs = ctx.getSharedPreferences(Constants.PREFERENCES, Context.MODE_MULTI_PROCESS);
SharedPreferences.Editor prefsEdit = prefs == null ? null: prefs.edit();
if ( prefsEdit == null) {
logi( "prefsSave failed");
return;
}
prefsEdit.putBoolean( PREFERENCES_pairStateError, pairStateError);
prefsEdit.putBoolean( PREFERENCES_pairStateResetTriple, pairStateResetTriple);
prefsEdit.apply();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -776,15 +776,13 @@ public void onServicesDiscovered(BluetoothGatt gatt, int status) {
}

if(status == BluetoothGatt.GATT_SUCCESS) {
ConnectedDevice cD = BluetoothUtils.getPairedMicrobit(MBApp.getApp());
if(gatt.getService(UUID.fromString("0000fe59-0000-1000-8000-00805f9b34fb")) != null ) {
Log.v(TAG, "Hardware Type: V2");
cD.mhardwareVersion = 2;
BluetoothUtils.setCurrentMicrobitHardwareVersion(MBApp.getApp(), 2);
} else {
Log.v(TAG, "Hardware Type: V1");
cD.mhardwareVersion = 1;
BluetoothUtils.setCurrentMicrobitHardwareVersion(MBApp.getApp(), 1);
}
BluetoothUtils.setPairedMicroBit(MBApp.getApp(), cD);
bleState |= state;
} else {
bleState &= (~state);
Expand Down
Loading

0 comments on commit 06f935a

Please sign in to comment.