Skip to content

Commit

Permalink
[Feature] New API reBuildRoute that takes Regex Pattern to match with…
Browse files Browse the repository at this point in the history
… StatefulView.key
  • Loading branch information
rh-id committed Nov 23, 2021
1 parent eb23a29 commit db10fd5
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package m.co.rh.id.anavigator.example;

public class PageKeys {
public static final String BOTTOM_PAGE = "BOTTOM";

private PageKeys() {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,22 @@

import com.google.android.material.button.MaterialButton;

import java.util.UUID;

import m.co.rh.id.anavigator.StatefulView;
import m.co.rh.id.anavigator.component.INavigator;
import m.co.rh.id.anavigator.component.RequireNavigator;
import m.co.rh.id.anavigator.example.PageKeys;
import m.co.rh.id.anavigator.example.R;

public class Bottom1Page extends StatefulView<Activity> implements RequireNavigator {
private transient INavigator mNavigator;
private int counter;

public Bottom1Page() {
super(PageKeys.BOTTOM_PAGE + "-1-" + UUID.randomUUID().toString());
}

@Override
public void provideNavigator(INavigator navigator) {
mNavigator = navigator;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,24 @@

import com.google.android.material.button.MaterialButton;

import java.util.UUID;
import java.util.regex.Pattern;

import m.co.rh.id.anavigator.StatefulView;
import m.co.rh.id.anavigator.component.INavigator;
import m.co.rh.id.anavigator.component.RequireNavigator;
import m.co.rh.id.anavigator.example.PageKeys;
import m.co.rh.id.anavigator.example.R;
import m.co.rh.id.anavigator.exception.NavigationRouteNotFound;

public class Bottom2Page extends StatefulView<Activity> implements RequireNavigator {
private transient INavigator mNavigator;
private int counter;

public Bottom2Page() {
super(PageKeys.BOTTOM_PAGE + "-2-" + UUID.randomUUID().toString());
}

@Override
public void provideNavigator(INavigator navigator) {
mNavigator = navigator;
Expand Down Expand Up @@ -48,6 +56,10 @@ protected View createView(Activity activity, ViewGroup container) {
.show();
}
});
MaterialButton rebuildPatternButton = view.findViewById(R.id.button_rebuild_pattern_bottom_page);
rebuildPatternButton.setOnClickListener(v ->
mNavigator.reBuildRoute(Pattern.compile("^" + PageKeys.BOTTOM_PAGE)));

Toast.makeText(activity, activity.getString(R.string.bottom_page_2),
Toast.LENGTH_SHORT)
.show();
Expand Down
9 changes: 9 additions & 0 deletions example/src/main/res/layout/page_bottomnav_page2.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,13 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/button_return" />

<com.google.android.material.button.MaterialButton
android:id="@+id/button_rebuild_pattern_bottom_page"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/rebuild_view_from_pattern"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/button_rebuild" />

</androidx.constraintlayout.widget.ConstraintLayout>
1 change: 1 addition & 0 deletions example/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,5 @@
<string name="rebuild_view_from_count_value">Rebuild View from Count Value</string>
<string name="bottom_page_1">Bottom Page 1</string>
<string name="bottom_page_2">Bottom Page 2</string>
<string name="rebuild_view_from_pattern">Rebuild view from pattern</string>
</resources>
19 changes: 19 additions & 0 deletions navigator/src/main/java/m/co/rh/id/anavigator/Navigator.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.crypto.Cipher;
import javax.crypto.SealedObject;
Expand Down Expand Up @@ -349,6 +351,23 @@ public void reBuildRoute(int routeIndex) {
}
}

@Override
public void reBuildRoute(Pattern pattern) {
if (pattern != null) {
if (!mNavRouteStack.isEmpty()) {
for (int i = mNavRouteStack.size() - 1, routeIndex = 0;
i >= 0;
i--, routeIndex++) {
String input = mNavRouteStack.get(i).getRouteStateKey();
Matcher m = pattern.matcher(input);
if (m.find()) {
reBuildRoute(routeIndex);
}
}
}
}
}

@Override
public void reBuildAllRoute() {
if (mIsNavigating) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import android.content.Intent;

import java.io.Serializable;
import java.util.regex.Pattern;

import m.co.rh.id.anavigator.NavConfiguration;
import m.co.rh.id.anavigator.NavRoute;
Expand Down Expand Up @@ -125,6 +126,13 @@ public interface INavigator {
*/
void reBuildRoute(int routeIndex);

/**
* Rebuild a route where StatefulView.key string contains the pattern.
*
* @param pattern to be matched with StatefulView.key
*/
void reBuildRoute(Pattern pattern);

/**
* Rebuild all route, start from initial route.
*/
Expand Down

0 comments on commit db10fd5

Please sign in to comment.