Skip to content

MalekKamel/Navigator

Repository files navigation

Android Navigator

Android Arsenal

A simple wrapper for Android navigation that helps you get rid of a lot of boilerplate code.

Install

Gradle:

allprojects {
    repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}

dependencies {
       implementation 'com.github.ShabanKamell:Navigator:x.y.z'
}

(Please replace x, y and z with the latest version numbers: )

Usage

Modular Navigation

Navigator supports Fragment/Activity navigation

Activity

// Declare Addresable Activity
object Profile: AddressableActivity {
     override val className: String = "com.sha.navigator.profile.ProfileActivity"
}
// start Activity
ActivityModuleNavigator(this, packageName).navigate(Profile)

Fragment

// Declare Addresable Fragment
object Profile: AddressableFragment {
     override val className: String = "com.sha.navigator.profile.ProfileFragment"
}
// Add Fragment
FragmentModuleNavigator(this).add(Profile)
// OR Replace Fragment
FragmentModuleNavigator(this).replace(Profile)

Fragment Navigation

Replace Fragment

 FragmentNavigator(this).replace(ExampleFragment.newInstance()

Add Fragment

 FragmentNavigator(this).add(ExampleFragment.newInstance())

Show DialogFragment

 FragmentNavigator(this).showDialogFragment(CustomerDialogFragment.newInstance())

Where's FrameLayout's ID?

FrameLayout's ID can be Provided with 2 ways:

1- Pass in FragmentNavigator Contstructor

   FragmentNavigator(this, R.id.mainFrame)

2- Provide only once in Application class or anywhere

In this case, you don't have to pass the ID in the constructor in every call.

class SampleApp : Application() {
    override fun onCreate() {
        super.onCreate()
        NavigatorOptions.frameLayoutId = R.id.mainFrame
    }
}

Note: Passing the ID in the constructor will override the ID of NavigatorOptions only this call and won't change NavigatorOptions's ID.

Activity Navigation

Navigate to Activity

 new ActivityNavigator(this).navigate(ExampleActivity.class);

Start Activity For Result

 ActivityNavigator(this).navigate(ExampleActivity::class.java)

With Parcelable

ActivityNavigator(this)
                    .withParcelable(Parcels.wrap(Message()), "message")
                    .navigate(ExampleActivity::class.java)

With Flags

  ActivityNavigator(this)  
        .withFlags(new Flags().newTask().singleTop())
        .navigate(ExampleActivity.class)
        
        // OR
        
  ActivityNavigator(this)  
        .withFlags(Intent.FLAG_ACTIVITY_NEW_TASK, Intent.FLAG_ACTIVITY_SINGLE_TOP)
        .navigate(ExampleActivity.class)

Open App In Google Play

  ActivityNavigator(this).openInGooglePlay()

Open Camera

  ActivityNavigator(this).openCamera(2)

Open Settings

  ActivityNavigator(this).navigateToSettings()

Show Route In Google Map

 new ActivityNavigator(this).showRouteInGoogleMap(  
        25.095549,  // from lat
        29.644703,  // from lng
        24.457151,  // to lat
        27.184841   // to lng
  );

See 'sample' module for the full code.

Credit

Plaid Modular Navigation

License

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.