Skip to content

Commit

Permalink
Merge pull request #266 from NordicSemiconductor/dev
Browse files Browse the repository at this point in the history
nRF Mesh Release v2.1.0
  • Loading branch information
roshanrajaratnam authored Oct 31, 2019
2 parents b6d32cb + 1cdbeb6 commit 7790b17
Show file tree
Hide file tree
Showing 57 changed files with 301 additions and 210 deletions.
10 changes: 5 additions & 5 deletions Example/nrf-mesh/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ android {
applicationId "no.nordicsemi.android.nrfmeshprovisioner"
minSdkVersion 18
targetSdkVersion 29
versionCode 53
versionName "2.0.5"
versionCode 56
versionName "2.1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
vectorDrawables.useSupportLibrary = true
Expand Down Expand Up @@ -63,8 +63,8 @@ dependencies {
testImplementation 'junit:junit:4.12'
implementation 'androidx.test:runner:1.2.0'

implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'com.google.android.material:material:1.1.0-alpha09'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.material:material:1.2.0-alpha01'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
Expand All @@ -79,7 +79,7 @@ dependencies {
// Log Bluetooth LE events in nRF Logger
implementation 'androidx.multidex:multidex:2.0.1'
// Lifecycle extensions
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0-alpha03'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0-rc01'

implementation 'com.google.dagger:dagger:2.21'
implementation 'com.google.dagger:dagger-android:2.21'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
import android.view.View;
import android.widget.Toast;

import com.google.android.material.snackbar.Snackbar;

import java.util.ArrayList;
import java.util.List;

Expand All @@ -38,10 +40,11 @@
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
import no.nordicsemi.android.meshprovisioner.ApplicationKey;
import no.nordicsemi.android.meshprovisioner.Group;
Expand Down Expand Up @@ -84,16 +87,18 @@ public class GroupControlsActivity extends AppCompatActivity implements Injectab

@Inject
ViewModelProvider.Factory mViewModelFactory;

@BindView(R.id.container)
CoordinatorLayout container;
private GroupControlsViewModel mViewModel;
private SubGroupAdapter groupAdapter;
private boolean mIsConnected;

@Override
protected void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_config_groups);
ButterKnife.bind(this);
mViewModel = ViewModelProviders.of(this, mViewModelFactory).get(GroupControlsViewModel.class);
mViewModel = new ViewModelProvider(this, mViewModelFactory).get(GroupControlsViewModel.class);

final Toolbar toolbar = findViewById(R.id.toolbar_info);
setSupportActionBar(toolbar);
Expand All @@ -106,8 +111,7 @@ protected void onCreate(@Nullable final Bundle savedInstanceState) {
recyclerViewSubGroups.setLayoutManager(new LinearLayoutManager(this));
groupAdapter = new SubGroupAdapter(this,
mViewModel.getNetworkLiveData().getMeshNetwork(),
mViewModel.getSelectedGroup(),
mViewModel.isConnectedToProxy());
mViewModel.getSelectedGroup());
groupAdapter.setOnItemClickListener(this);
recyclerViewSubGroups.setAdapter(groupAdapter);

Expand Down Expand Up @@ -153,7 +157,11 @@ protected void onCreate(@Nullable final Bundle savedInstanceState) {
}
});

mViewModel.isConnectedToProxy().observe(this, aBoolean -> invalidateOptionsMenu());
mViewModel.isConnectedToProxy().observe(this, aBoolean -> {
mIsConnected = aBoolean;
groupAdapter.updateAdapterData();
invalidateOptionsMenu();
});

}

Expand Down Expand Up @@ -198,6 +206,9 @@ protected void onDestroy() {

@Override
public void onSubGroupItemClick(final int appKeyIndex, final int modelId) {
if(!isConnected())
return;

if (MeshParserUtils.isVendorModel(modelId)) {
final BottomSheetVendorDialogFragment onOffFragment = BottomSheetVendorDialogFragment.getInstance(modelId, appKeyIndex);
onOffFragment.show(getSupportFragmentManager(), VENDOR_FRAGMENT);
Expand All @@ -217,6 +228,9 @@ public void onSubGroupItemClick(final int appKeyIndex, final int modelId) {

@Override
public void toggle(final int appKeyIndex, final int modelId, final boolean isChecked) {
if (!isConnected()) {
return;
}
final Group group = mViewModel.getSelectedGroup().getValue();
if (group == null)
return;
Expand All @@ -239,6 +253,9 @@ public void toggle(final int appKeyIndex, final int modelId, final boolean isChe

@Override
public void toggle(final int keyIndex, final boolean state, final int transitionSteps, final int transitionStepResolution, final int delay) {
if (!isConnected()) {
return;
}
final Group group = mViewModel.getSelectedGroup().getValue();
if (group == null)
return;
Expand All @@ -253,11 +270,13 @@ public void toggle(final int keyIndex, final boolean state, final int transition

@Override
public void toggleLevel(final int keyIndex, final int level, final int transitionSteps, final int transitionStepResolution, final int delay) {
if (!isConnected()) {
return;
}
final Group group = mViewModel.getSelectedGroup().getValue();
if (group == null)
return;


final MeshNetwork network = mViewModel.getNetworkLiveData().getMeshNetwork();
if (network != null) {
final ApplicationKey applicationKey = mViewModel.getNetworkLiveData().getMeshNetwork().getAppKey(keyIndex);
Expand Down Expand Up @@ -345,4 +364,13 @@ private void sendMessage(final int address, final MeshMessage meshMessage) {
message.show(getSupportFragmentManager(), null);
}
}

@SuppressWarnings("BooleanMethodIsAlwaysInverted")
private boolean isConnected() {
if (!mIsConnected) {
mViewModel.displaySnackBar(this, container, getString(R.string.please_connect_to_network), Snackbar.LENGTH_SHORT);
return false;
}
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
@Override
public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable final Bundle savedInstanceState) {
@SuppressLint("InflateParams") final View rootView = inflater.inflate(R.layout.fragment_groups, null);
mViewModel = ViewModelProviders.of(requireActivity(), mViewModelFactory).get(SharedViewModel.class);
mViewModel = new ViewModelProvider(requireActivity(), mViewModelFactory).get(SharedViewModel.class);
ButterKnife.bind(this, rootView);

final ExtendedFloatingActionButton fab = rootView.findViewById(R.id.fab_add_group);
Expand All @@ -99,7 +99,7 @@ public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final
adapter.setOnItemClickListener(this);
recyclerViewGroups.setAdapter(adapter);

mViewModel.getNetworkLiveData().observe(this, meshNetworkLiveData -> {
mViewModel.getNetworkLiveData().observe(getViewLifecycleOwner(), meshNetworkLiveData -> {
if (meshNetworkLiveData != null) {
if (meshNetworkLiveData.getMeshNetwork().getGroups().isEmpty()) {
mEmptyView.setVisibility(View.VISIBLE);
Expand All @@ -109,7 +109,7 @@ public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final
}
});

mViewModel.getGroups().observe(this, groups -> {
mViewModel.getGroups().observe(getViewLifecycleOwner(), groups -> {
final MeshNetwork network = mViewModel.getNetworkLiveData().getMeshNetwork();
adapter.updateAdapter(network, groups);
});
Expand All @@ -126,9 +126,9 @@ public void onScrolled(@NonNull final RecyclerView recyclerView, final int dx, f
final LinearLayoutManager m = (LinearLayoutManager) recyclerView.getLayoutManager();
if (m != null) {
if (m.findFirstCompletelyVisibleItemPosition() == 0) {
fab.extend(true);
fab.extend();
} else {
fab.shrink(true);
fab.shrink();
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public class MainActivity extends AppCompatActivity implements Injectable,
protected void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewModel = ViewModelProviders.of(this).get(SharedViewModel.class);
mViewModel = new ViewModelProvider(this).get(SharedViewModel.class);
ButterKnife.bind(this);

final Toolbar toolbar = findViewById(R.id.toolbar);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public class NetworkFragment extends Fragment implements Injectable,
@Override
public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable final Bundle savedInstanceState) {
@SuppressLint("InflateParams") final View rootView = inflater.inflate(R.layout.fragment_network, null);
mViewModel = ViewModelProviders.of(requireActivity(), mViewModelFactory).get(SharedViewModel.class);
mViewModel = new ViewModelProvider(requireActivity(), mViewModelFactory).get(SharedViewModel.class);
ButterKnife.bind(this, rootView);

final ExtendedFloatingActionButton fab = rootView.findViewById(R.id.fab_add_node);
Expand All @@ -99,7 +99,7 @@ public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final
mRecyclerViewNodes.setAdapter(mNodeAdapter);

// Create view model containing utility methods for scanning
mViewModel.getNodes().observe(this, nodes -> {
mViewModel.getNodes().observe(getViewLifecycleOwner(), nodes -> {
if (nodes != null && !nodes.isEmpty()) {
noNetworksConfiguredView.setVisibility(View.GONE);
} else {
Expand All @@ -108,7 +108,7 @@ public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final
requireActivity().invalidateOptionsMenu();
});

mViewModel.isConnectedToProxy().observe(this, isConnected -> {
mViewModel.isConnectedToProxy().observe(getViewLifecycleOwner(), isConnected -> {
if (isConnected != null) {
requireActivity().invalidateOptionsMenu();
}
Expand All @@ -121,9 +121,9 @@ public void onScrolled(@NonNull final RecyclerView recyclerView, final int dx, f
final LinearLayoutManager m = (LinearLayoutManager) recyclerView.getLayoutManager();
if (m != null) {
if (m.findFirstCompletelyVisibleItemPosition() == 0) {
fab.extend(true);
fab.extend();
} else {
fab.shrink(true);
fab.shrink();
}
}
}
Expand All @@ -147,7 +147,7 @@ public void onActivityResult(final int requestCode, final int resultCode, @Nulla
@Override
public void onConfigureClicked(final ProvisionedMeshNode node) {
mViewModel.setSelectedMeshNode(node);
final Intent meshConfigurationIntent = new Intent(getActivity(), NodeConfigurationActivity.class);
final Intent meshConfigurationIntent = new Intent(requireActivity(), NodeConfigurationActivity.class);
requireActivity().startActivity(meshConfigurationIntent);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ protected void onCreate(final Bundle savedInstanceState) {
getSupportActionBar().setSubtitle(deviceAddress);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

mViewModel = ViewModelProviders.of(this, mViewModelFactory).get(ProvisioningViewModel.class);
mViewModel = new ViewModelProvider(this, mViewModelFactory).get(ProvisioningViewModel.class);
if (savedInstanceState == null)
mViewModel.connect(this, device, false);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
@Override
public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable final Bundle savedInstanceState) {
@SuppressLint("InflateParams") final View rootView = inflater.inflate(R.layout.fragment_proxy_filter, null);
mViewModel = ViewModelProviders.of(requireActivity(), mViewModelFactory).get(SharedViewModel.class);
mViewModel = new ViewModelProvider(requireActivity(), mViewModelFactory).get(SharedViewModel.class);
ButterKnife.bind(this, rootView);

if (savedInstanceState != null) {
Expand All @@ -124,7 +124,7 @@ public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final
addressAdapter = new FilterAddressAdapter(requireContext());
recyclerViewAddresses.setAdapter(addressAdapter);

mViewModel.isConnectedToProxy().observe(this, isConnected -> {
mViewModel.isConnectedToProxy().observe(getViewLifecycleOwner(), isConnected -> {
if (!isConnected) {
clearAddressPressed = false;
final MeshNetwork network = mViewModel.getNetworkLiveData().getMeshNetwork();
Expand All @@ -148,7 +148,7 @@ public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final
actionEnableBlackList.setEnabled(isConnected);
});

mViewModel.getNetworkLiveData().observe(this, meshNetworkLiveData -> {
mViewModel.getNetworkLiveData().observe(getViewLifecycleOwner(), meshNetworkLiveData -> {
final MeshNetwork network = meshNetworkLiveData.getMeshNetwork();
if (network == null) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
public View onCreateView(@NonNull final LayoutInflater inflater,
@Nullable final ViewGroup container, @Nullable final Bundle savedInstanceState) {
@SuppressLint("InflateParams") final View rootView = inflater.inflate(R.layout.fragment_settings, null);
mViewModel = ViewModelProviders.of(getActivity(), mViewModelFactory).get(SharedViewModel.class);
mViewModel = new ViewModelProvider(requireActivity(), mViewModelFactory).get(SharedViewModel.class);

// Set up views
final View containerNetworkName = rootView.findViewById(R.id.container_network_name);
Expand Down Expand Up @@ -159,7 +159,7 @@ public View onCreateView(@NonNull final LayoutInflater inflater,
e.printStackTrace();
}

mViewModel.getNetworkLiveData().observe(this, meshNetworkLiveData -> {
mViewModel.getNetworkLiveData().observe(getViewLifecycleOwner(), meshNetworkLiveData -> {
if (meshNetworkLiveData != null) {
networkNameView.setText(meshNetworkLiveData.getNetworkName());
netKeySummary.setText(String.valueOf(meshNetworkLiveData.getNetworkKeys().size()));
Expand All @@ -168,15 +168,15 @@ public View onCreateView(@NonNull final LayoutInflater inflater,
}
});

mViewModel.getNetworkLoadState().observe(this, networkImportState -> {
mViewModel.getNetworkLoadState().observe(getViewLifecycleOwner(), networkImportState -> {
final String title = getString(R.string.title_network_import);
final DialogFragmentMeshImportMsg fragment =
DialogFragmentMeshImportMsg.newInstance(R.drawable.ic_info_outline_black_alpha,
title, networkImportState);
fragment.show(getChildFragmentManager(), null);
});

mViewModel.getNetworkExportState().observe(this, networkExportState -> {
mViewModel.getNetworkExportState().observe(getViewLifecycleOwner(), networkExportState -> {
final String title = getString(R.string.title_network_export);
final DialogFragmentMeshExportMsg fragment =
DialogFragmentMeshExportMsg.newInstance(R.drawable.ic_info_outline_black_alpha,
Expand Down Expand Up @@ -293,9 +293,9 @@ private void performFileSearch() {

private void handleNetworkExport() {
if (!Utils.isWriteExternalStoragePermissionsGranted(getContext())
|| Utils.isWriteExternalStoragePermissionDeniedForever(getActivity())) {
|| Utils.isWriteExternalStoragePermissionDeniedForever(requireActivity())) {
final DialogFragmentPermissionRationale fragmentPermissionRationale = DialogFragmentPermissionRationale.
newInstance(Utils.isWriteExternalStoragePermissionDeniedForever(getActivity()),
newInstance(Utils.isWriteExternalStoragePermissionDeniedForever(requireActivity()),
getString(R.string.title_permission_required),
getString(R.string.external_storage_permission_required));
fragmentPermissionRationale.show(getChildFragmentManager(), null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public class SplashScreenActivity extends AppCompatActivity implements Injectabl
protected void onCreate(final Bundle savedInstanceState) {
setContentView(R.layout.activity_splash_screen);
super.onCreate(savedInstanceState);
final SplashViewModel viewModel = ViewModelProviders.of(SplashScreenActivity.this, mViewModelFactory).get(SplashViewModel.class);
final SplashViewModel viewModel = new ViewModelProvider(SplashScreenActivity.this, mViewModelFactory).get(SplashViewModel.class);
viewModel.getNetworkLiveData().observe(this, meshNetworkLiveData -> {
if(meshNetworkLiveData != null && meshNetworkLiveData.getMeshNetwork() != null) {
navigateActivity();
Expand Down
Loading

0 comments on commit 7790b17

Please sign in to comment.