Managing OkCollect start requirements
How to ensure all conditions are met before starting the address creation process
Managing start requirements
For OkCollect to run effectively the following conditions must be met:
User grants location permission
Location services must be turned on
Google Play Services must be available
Luckily the OkHiCore library has helper methods to assist you with these requirements.
Configure OkCollect to receive permissions and activity results
public class MainActivity extends AppCompatActivity {
private OkHi okhi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
okhi = new OkHi(this);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// Pass permission results to okcollect
okhi.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Pass activity results results to okcollect
okhi.onActivityResult(requestCode, resultCode, data);
}
}
Check and request for OkCollect start requirements
public class MainActivity extends AppCompatActivity {
OkCollect okCollect;
OkHi okhi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
OkHiTheme theme = new OkHiTheme.Builder("#ba0c2f")
.setAppBarLogo("https://cdn.okhi.co/icon.png")
.setAppBarColor("#ba0c2f")
.build();
OkHiConfig config = new OkHiConfig.Builder()
.withStreetView()
.build();
try {
okhi = new OkHi(this);
okCollect = new OkCollect.Builder(this)
.withTheme(theme)
.withConfig(config)
.build();
} catch (OkHiException exception) {
exception.printStackTrace();
}
}
//start the address creation flow
private void launchOkCollect(){
boolean canStartOkCollect = canStartAddressCreation();
if(canStartOkCollect) {
final OkHiUser user = new OkHiUser.Builder("+254711234567")
.withFirstName("Juliet")
.withLastName("Zuri")
.build();
okCollect.launch(user, new OkCollectCallback<OkHiUser, OkHiLocation>() {
@Override
public void onSuccess(OkHiUser user, OkHiLocation location) {
showMessage(user.getPhone() + " " + location.getId());
}
@Override
public void onError(OkHiException e) {
showMessage(e.getCode() + " " + e.getMessage());
}
});
}
}
private void showMessage(String log){
Toast.makeText(MainActivity.this,log,Toast.LENGTH_LONG).show();
}
//handler class that extends OkHiRequestHandler
class Handler implements OkHiRequestHandler<Boolean> {
@Override
public void onResult(Boolean result) {
if (result) launchOkCollect();
}
@Override
public void onError(OkHiException exception) {
showMessage(exception.getMessage());
}
}
// Define a method you'll use to check if conditions are met to start address creation
private boolean canStartAddressCreation() {
Handler requestHandler = new Handler();
// Check and request user to enable location services
if (!OkHi.isLocationServicesEnabled(getApplicationContext())) {
okhi.requestEnableLocationServices(requestHandler);
} else if (!OkHi.isGooglePlayServicesAvailable(getApplicationContext())) {
// Check and request user to enable google play services
okhi.requestEnableGooglePlayServices(requestHandler);
} else if (!OkHi.isLocationPermissionGranted(getApplicationContext())) {
// Check and request user to grant location permission
okhi.requestLocationPermission("Hey we need location permissions", "Pretty please..", requestHandler);
} else {
return true;
}
return false;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// Pass permission results to okcollect
okhi.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Pass activity results results to okcollect
okhi.onActivityResult(requestCode, resultCode, data);
}
public void handleButtonTap(View view) {
launchOkCollect();
}
}
Last updated