Skip to content
This repository has been archived by the owner on Feb 17, 2020. It is now read-only.

Commit

Permalink
Merge pull request #211 from rock3r/SQ-60/create_location_onboarding
Browse files Browse the repository at this point in the history
SQ-60/Create location onboarding
  • Loading branch information
tiwiz committed Mar 30, 2017
2 parents cff1e54 + 5e7306f commit d50bcc1
Show file tree
Hide file tree
Showing 28 changed files with 642 additions and 88 deletions.
7 changes: 7 additions & 0 deletions app/src/main/AndroidManifest.xml
Expand Up @@ -4,6 +4,8 @@
package="net.squanchy">

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Expand Down Expand Up @@ -76,6 +78,11 @@
android:theme="@style/Theme.Squanchy.Licenses"
android:label="@string/licenses_label" />

<activity
android:name="net.squanchy.onboarding.location.LocationOnboardingActivity"
android:theme="@style/Theme.Squanchy.Onboarding"
android:label="@string/onboarding_location_label" />

<!-- We're ok with "directBootAware" only being used where Direct Boot exists (API 24+) -->
<receiver
android:name="net.squanchy.notification.NotificationAlarmReceiver"
Expand Down
2 changes: 0 additions & 2 deletions app/src/main/java/net/squanchy/about/AboutInjector.java
Expand Up @@ -4,8 +4,6 @@

import net.squanchy.injection.ActivityContextModule;
import net.squanchy.navigation.NavigationModule;
import net.squanchy.settings.DaggerSettingsComponent;
import net.squanchy.settings.SettingsComponent;

final class AboutInjector {

Expand Down
@@ -1,7 +1,5 @@
package net.squanchy.favorites;

import android.content.Context;

import net.squanchy.analytics.Analytics;
import net.squanchy.injection.ActivityLifecycle;
import net.squanchy.injection.ApplicationComponent;
Expand All @@ -18,8 +16,6 @@ interface FavoritesComponent {

ScheduleService service();

Context context();

Navigator navigator();

Analytics analytics();
Expand Down
20 changes: 9 additions & 11 deletions app/src/main/java/net/squanchy/home/HomeActivity.java
Expand Up @@ -43,10 +43,8 @@

public class HomeActivity extends TypefaceStyleableActivity {

private static final String STATE_KEY_SELECTED_PAGE_INDEX = "HomeActivity.selected_page_index";
private static final String KEY_CONTEST_STAND = "stand";
private static final int MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 1000;
private static final boolean PROXIMITY_SERVICE_RADAR_NOT_STARTED = false;

private final Map<BottomNavigationSection, View> pageViews = new HashMap<>(4);
private final List<LifecycleView> lifecycleViews = new ArrayList<>(4);
Expand Down Expand Up @@ -152,15 +150,6 @@ protected void onStart() {
}
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION) {
if (hasGrantedFineLocationAccess(grantResults)) {
proximityService.startRadar();
}
}
}

private void askProximityPermissionToStartRadar() {
if (hasLocationPermission()) {
proximityService.startRadar();
Expand All @@ -173,6 +162,15 @@ private void askProximityPermissionToStartRadar() {
}
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION) {
if (hasGrantedFineLocationAccess(grantResults)) {
proximityService.startRadar();
}
}
}

private boolean hasLocationPermission() {
int granted = ContextCompat.checkSelfPermission(
this,
Expand Down
@@ -1,6 +1,6 @@
package net.squanchy.imageloader;

import android.content.Context;
import android.app.Activity;

import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
Expand All @@ -15,8 +15,8 @@
class ImageLoaderModule {

@Provides
RequestManager glideRequestManager(Context context) {
return Glide.with(context);
RequestManager glideRequestManager(Activity activity) {
return Glide.with(activity);
}

@Provides
Expand Down
@@ -1,7 +1,6 @@
package net.squanchy.injection;

import android.app.Activity;
import android.content.Context;

import dagger.Module;
import dagger.Provides;
Expand All @@ -16,7 +15,7 @@ public ActivityContextModule(Activity activity) {
}

@Provides
Context activityContext() {
Activity activityContext() {
return activity;
}
}
@@ -1,6 +1,6 @@
package net.squanchy.navigation;

import android.content.Context;
import android.app.Activity;

import net.squanchy.injection.ActivityContextModule;

Expand All @@ -16,7 +16,7 @@ DebugActivityIntentFactory debugActivityIntentFactory() {
}

@Provides
public Navigator navigator(Context context, DebugActivityIntentFactory debugActivityIntentFactory) {
return new Navigator(context, debugActivityIntentFactory);
public Navigator navigator(Activity activity, DebugActivityIntentFactory debugActivityIntentFactory) {
return new Navigator(activity, debugActivityIntentFactory);
}
}
63 changes: 37 additions & 26 deletions app/src/main/java/net/squanchy/navigation/Navigator.java
@@ -1,15 +1,16 @@
package net.squanchy.navigation;

import android.content.Context;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;

import net.squanchy.contest.ContestActivity;
import net.squanchy.BuildConfig;
import net.squanchy.about.AboutActivity;
import net.squanchy.about.licenses.LicensesActivity;
import net.squanchy.contest.ContestActivity;
import net.squanchy.eventdetails.EventDetailsActivity;
import net.squanchy.home.HomeActivity;
import net.squanchy.onboarding.OnboardingPage;
import net.squanchy.search.SearchActivity;
import net.squanchy.settings.SettingsActivity;
import net.squanchy.signin.SignInActivity;
Expand All @@ -26,51 +27,48 @@

public class Navigator {

private final Context context;
private static final int NO_FLAGS = 0;
private final Activity activity;
private final DebugActivityIntentFactory debugActivityIntentFactory;

Navigator(Context context, DebugActivityIntentFactory debugActivityIntentFactory) {
this.context = context;
Navigator(Activity activity, DebugActivityIntentFactory debugActivityIntentFactory) {
this.activity = activity;
this.debugActivityIntentFactory = debugActivityIntentFactory;
}

public void toEventDetails(String eventId) {
start(EventDetailsActivity.createIntent(context, eventId));
}

public void toSignIn() {
start(new Intent(context, SignInActivity.class));
start(EventDetailsActivity.createIntent(activity, eventId));
}

public void toSpeakerDetails(String speakerId) {
start(
SpeakerDetailsActivity.createIntent(context, speakerId),
SpeakerDetailsActivity.createIntent(activity, speakerId),
FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACTIVITY_CLEAR_TOP
);
}

public void toSearch() {
start(new Intent(context, SearchActivity.class));
start(new Intent(activity, SearchActivity.class));
}

public void toContest() {
Intent intent = ContestActivity.createIntent(context);
Intent intent = ContestActivity.createIntent(activity);
start(
intent,
FLAG_ACTIVITY_SINGLE_TOP
);
}

public void toContest(String achievementId) {
Intent intent = ContestActivity.createIntent(context, achievementId);
Intent intent = ContestActivity.createIntent(activity, achievementId);
start(
intent,
FLAG_ACTIVITY_SINGLE_TOP
);
}

public void toSettings() {
start(new Intent(context, SettingsActivity.class));
start(new Intent(activity, SettingsActivity.class));
}

public void toTwitterProfile(String username) {
Expand All @@ -83,7 +81,7 @@ public void toTwitterProfile(String username) {
}

private boolean canResolve(Intent intent) {
return !context.getPackageManager()
return !activity.getPackageManager()
.queryIntentActivities(intent, 0)
.isEmpty();
}
Expand All @@ -103,56 +101,69 @@ public void toSchedule() {

public void toSchedule(Optional<String> dayId, Optional<String> eventId) {
start(
HomeActivity.createScheduleIntent(context, dayId, eventId),
HomeActivity.createScheduleIntent(activity, dayId, eventId),
FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK
);
}

public void toFavorites() {
start(
HomeActivity.createFavoritesIntent(context),
HomeActivity.createFavoritesIntent(activity),
FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK
);
}

public void toTwitterFeed() {
start(
HomeActivity.createTweetsIntent(context),
HomeActivity.createTweetsIntent(activity),
FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK
);
}

public void toVenueInfo() {
start(
HomeActivity.createVenueInfoIntent(context),
HomeActivity.createVenueInfoIntent(activity),
FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK
);
}

public void toDebugSettings() {
if (BuildConfig.DEBUG) {
start(debugActivityIntentFactory.createDebugActivityIntent(context));
start(debugActivityIntentFactory.createDebugActivityIntent(activity));
} else {
Timber.e("Someone is trying to reach the debug activity in a release build... that won't work");
}
}

public void toAboutSquanchy() {
start(new Intent(context, AboutActivity.class));
start(new Intent(activity, AboutActivity.class));
}

public void toFossLicenses() {
start(new Intent(context, LicensesActivity.class));
start(new Intent(activity, LicensesActivity.class));
}

public void toSignIn() {
start(new Intent(activity, SignInActivity.class));
}

private void start(Intent intent) {
start(intent, 0);
start(intent, NO_FLAGS);
}

private void start(Intent intent, int flags) {
if (flags != 0) {
if (flags != NO_FLAGS) {
intent.addFlags(flags);
}
context.startActivity(intent);
activity.startActivity(intent);
}

public void toOnboardingForResult(OnboardingPage page, int requestCode) {
Intent intent = new Intent(activity, page.activityClass());
startForResult(intent, requestCode);
}

private void startForResult(Intent intent, int requestCode) {
activity.startActivityForResult(intent, requestCode);
}
}
37 changes: 34 additions & 3 deletions app/src/main/java/net/squanchy/navigation/RoutingActivity.java
Expand Up @@ -6,15 +6,21 @@

import net.squanchy.fonts.TypefaceStyleableActivity;
import net.squanchy.navigation.deeplink.DeepLinkRouter;
import net.squanchy.onboarding.Onboarding;
import net.squanchy.onboarding.OnboardingPage;
import net.squanchy.signin.SignInService;
import net.squanchy.support.lang.Optional;

import io.reactivex.disposables.Disposable;
import timber.log.Timber;

public class RoutingActivity extends TypefaceStyleableActivity {

private static final int ONBOARDING_REQUEST_CODE = 2453;

private DeepLinkRouter deepLinkRouter;
private Navigator navigator;
private Onboarding onboarding;
private Disposable subscription;

@Override
Expand All @@ -24,16 +30,41 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
RoutingComponent component = RoutingInjector.obtain(this);
deepLinkRouter = component.deepLinkRouter();
navigator = component.navigator();
onboarding = component.onboarding();

SignInService signInService = component.signInService();
subscription = signInService.signInAnonymouslyIfNecessary().subscribe();

routeTo(getIntent());
}

@Override
protected void onStart() {
super.onStart();
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ONBOARDING_REQUEST_CODE) {
handleOnboardingResult(resultCode);
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}

private void handleOnboardingResult(int resultCode) {
if (resultCode == RESULT_OK) {
routeTo(getIntent());
} else {
finish();
}
}

private void routeTo(Intent intent) {
Optional<OnboardingPage> onboardingPageToShow = onboarding.nextPageToShow();
if (onboardingPageToShow.isPresent()) {
navigator.toOnboardingForResult(onboardingPageToShow.get(), ONBOARDING_REQUEST_CODE);
} else {
proceedTo(intent);
}
}

Intent intent = getIntent();
private void proceedTo(Intent intent) {
if (deepLinkRouter.hasDeepLink(intent)) {
String intentUriString = intent.getDataString();
Timber.i("Deeplink detected, navigating to \"%s\"", intentUriString);
Expand Down

0 comments on commit d50bcc1

Please sign in to comment.