Skip to content

Commit

Permalink
Release v1.2.0 (#172)
Browse files Browse the repository at this point in the history
* Fixes src and dest was swapped on LightLightness
*  Adds support for controlling groups. Previously this was done in each model configuration view but now model configuration will only allow sending messages to the unicast address itself.
* Fixes a documentation bug after renaming callbacks.
* All addresses now use ints instead of byte arrays.
* Fixes a bug relating to broken parcelable implementations
* Added an additional api to override default 5 second attention timer.
`identifyNode(@nonnull final UUID deviceUuid, final String nodeName, final int attentionTimer)`
* Moved bouncy castle insertion to MeshManagerApi.
* Adds support for multiple provisioning capabilities. This includes No OOB, Static OOB, Output OOB and Input OOB methods. Now the user is prompted to pick supported Authentication Method and Authentication action during the provisioning process.
  - 3 new APIs added 
    - `startProvisioningWithStaticOOB(@nonnull final UnprovisionedMeshNode unprovisionedMeshNode)`
    - `startProvisioningWithOutputOOB(@nonnull final UnprovisionedMeshNode unprovisionedMeshNode, final OutputOOBAction oobAction)`,  
    - `startProvisioningWithInputOOB(@nonnull final UnprovisionedMeshNode unprovisionedMeshNode, @nonnull final InputOOBAction oobAction)` 
  - Adds ConfigModelPublicationGet message
  - Adds support for importing and exporting json strings
  - Fixes a bug relating to vendor models in json serializer/deserializer when importing/exporting mesh networks.
* Fixes #152
  • Loading branch information
roshanrajaratnam authored Mar 5, 2019
1 parent bdf148d commit f268d38
Show file tree
Hide file tree
Showing 323 changed files with 13,152 additions and 5,313 deletions.
4 changes: 2 additions & 2 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 28
versionCode 27
versionName "1.1.0"
versionCode 28
versionName "1.2.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
vectorDrawables.useSupportLibrary = true
Expand Down
14 changes: 6 additions & 8 deletions Example/nrf-mesh/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
</activity>
<activity
android:name=".MainActivity"
android:icon="@drawable/ic_blinky_feature"
android:icon="@drawable/ic_feature_mesh"
android:label="@string/feature_name"
android:launchMode="singleTop">
<intent-filter>
Expand All @@ -64,11 +64,15 @@
</intent-filter>
</activity>
<activity
android:name=".ProvisionedNodesScannerActivity"
android:name=".ScannerActivity"
android:launchMode="singleTop"/>
<activity
android:name=".ReconnectActivity"
android:launchMode="singleTop"/>
<activity
android:name=".GroupControlsActivity"
android:launchMode="singleTop"
android:configChanges="orientation|screenSize"/>
<activity
android:name=".ManageAppKeysActivity"
android:launchMode="singleTop"/>
Expand All @@ -84,12 +88,6 @@
<activity
android:name=".NodeDetailsActivity"
android:launchMode="singleTop"/>
<activity
android:name=".ManageNodeAppKeysActivity"
android:launchMode="singleTop"/>
<activity
android:name=".BindAppKeysActivity"
android:launchMode="singleTop"/>
<activity
android:name=".GenericLevelServerActivity"
android:launchMode="singleTop"/>
Expand Down

Large diffs are not rendered by default.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
package no.nordicsemi.android.nrfmeshprovisioner;

import android.app.Activity;
import android.arch.lifecycle.ViewModelProvider;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.BottomSheetDialogFragment;
import android.support.design.widget.TextInputEditText;
import android.support.design.widget.TextInputLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;

import java.util.ArrayList;

import javax.inject.Inject;

import no.nordicsemi.android.meshprovisioner.Group;
import no.nordicsemi.android.meshprovisioner.transport.Element;
import no.nordicsemi.android.meshprovisioner.transport.MeshModel;
import no.nordicsemi.android.nrfmeshprovisioner.adapter.GroupModelAdapter;

public class BottomSheetDetailsDialogFragment extends BottomSheetDialogFragment implements GroupModelAdapter.OnItemClickListener {

private static final String GROUP = "GROUP";
private static final String ELEMENTS = "ELEMENTS";


@Inject
ViewModelProvider.Factory mViewModelFactory;

private TextInputLayout mGroupNameInputLayout;
private TextInputEditText mGroupNameTextInput;

private Group mGroup;
private ArrayList<Element> mElements = new ArrayList<>();
private GroupModelAdapter mGroupModelsAdapter;

public interface BottomSheetDetailsListener {
void editModelItem(@NonNull final Element element, @NonNull final MeshModel model);

void onGroupNameChanged(@NonNull final Group group);
}

public static BottomSheetDetailsDialogFragment getInstance(final Group group, final ArrayList<Element> elements) {
final BottomSheetDetailsDialogFragment fragment = new BottomSheetDetailsDialogFragment();
final Bundle args = new Bundle();
args.putParcelable(GROUP, group);
args.putParcelableArrayList(ELEMENTS, elements);
fragment.setArguments(args);
return fragment;
}

@Override
public void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NORMAL, R.style.CustomBottomSheetDialog);
if (getArguments() != null) {
mGroup = getArguments().getParcelable(GROUP);
mElements = getArguments().getParcelableArrayList(ELEMENTS);
}
}

@Nullable
@Override
public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable final Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_bottom_sheet_dialog, container, false);

mGroupNameInputLayout = rootView.findViewById(R.id.text_input_layout);
mGroupNameTextInput = rootView.findViewById(R.id.text_input);
mGroupNameTextInput.setText(mGroup.getName());

final RecyclerView recyclerViewGroupItems = rootView.findViewById(R.id.group_items);
recyclerViewGroupItems.setLayoutManager(new LinearLayoutManager(requireContext()));
mGroupModelsAdapter = new GroupModelAdapter(requireContext(), mGroup, mElements);
mGroupModelsAdapter.setOnItemClickListener(this);
recyclerViewGroupItems.setAdapter(mGroupModelsAdapter);

final Button actionApply = rootView.findViewById(R.id.action_apply);
actionApply.setOnClickListener(v -> {
final String groupName = mGroupNameTextInput.getEditableText().toString();
if (validateInput(groupName)) {
hideKeyboard();
mGroupNameTextInput.clearFocus();
mGroup.setName(groupName);
((BottomSheetDetailsListener) requireActivity()).onGroupNameChanged(mGroup);
}
});

return rootView;
}

@Override
public void onModelItemClick(final Element element, final MeshModel model) {
((BottomSheetDetailsListener) requireActivity()).editModelItem(element, model);
}

public void updateAdapter(final Group group, final ArrayList<Element> elements) {
if (mGroupModelsAdapter != null) {
mGroup = group;
mElements = elements;
mGroupModelsAdapter.updateAdapter(group, elements);
mGroupModelsAdapter.notifyDataSetChanged();
}
}

private boolean validateInput(final String groupName) {
return !TextUtils.isEmpty(groupName);
}

public void hideKeyboard() {
final InputMethodManager imm = (InputMethodManager) requireActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(mGroupNameTextInput.getWindowToken(), 0);
}
}
}
Loading

0 comments on commit f268d38

Please sign in to comment.