Skip to content

Commit

Permalink
Merge pull request #200 from criticalmaps/develop
Browse files Browse the repository at this point in the history
Release
  • Loading branch information
stephanlindauer committed Aug 28, 2017
2 parents 96154f2 + 15ca66c commit 5e68ee3
Show file tree
Hide file tree
Showing 81 changed files with 625 additions and 418 deletions.
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ android:
- platform-tools

# The BuildTools version used by your project
- build-tools-25.0.3
- build-tools-26.0.1

# The SDK version used to compile your project
- android-25
- android-26

# Additional components
# - extra-google-google_play_services
Expand Down
10 changes: 5 additions & 5 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ apply plugin: 'com.android.application'
apply plugin: 'de.mobilej.unmock'

android {
compileSdkVersion 25
buildToolsVersion '25.0.3'
compileSdkVersion 26
buildToolsVersion '26.0.1'

defaultConfig {
applicationId "de.stephanlindauer.criticalmaps"
Expand Down Expand Up @@ -45,19 +45,19 @@ android {

dependencies {
compile 'com.squareup:otto:1.3.8'
compile 'org.osmdroid:osmdroid-android:5.6.3'
compile 'org.osmdroid:osmdroid-android:5.6.5'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0'
compile "com.android.support:support-v4:$support_version"
compile "com.android.support:appcompat-v7:$support_version"
compile "com.android.support:support-annotations:$support_version"
compile "com.android.support:design:$support_version"

compile 'com.squareup.okhttp3:okhttp:3.8.0'
compile 'com.squareup.okhttp3:okhttp:3.8.1'
compile "com.jakewharton:butterknife:$butterknife_version"
annotationProcessor "com.jakewharton:butterknife-compiler:$butterknife_version"

compile 'org.ligi:AXT:0.35'
compile 'org.ligi:AXT:0.37'
compile 'info.metadude.android:typed-preferences:2.1.0'
compile "com.google.dagger:dagger:$dagger_version"

Expand Down
1 change: 0 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
<activity
android:name="de.stephanlindauer.criticalmaps.Main"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
Expand Down
1 change: 1 addition & 0 deletions app/src/main/java/de/stephanlindauer/criticalmaps/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import android.app.Application;


public class App extends Application {

private static AppComponent appComponent;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ public interface AppComponent {

void inject(PrerequisitesChecker prerequisitesChecker);

App app();

Picasso picasso();

OwnLocationModel ownLocationmodel();
Expand Down
28 changes: 17 additions & 11 deletions app/src/main/java/de/stephanlindauer/criticalmaps/AppModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.squareup.picasso.Picasso;
import dagger.Module;
import dagger.Provides;
import de.stephanlindauer.criticalmaps.handler.NetworkConnectivityChangeHandler;
import de.stephanlindauer.criticalmaps.handler.ServerResponseProcessor;
import de.stephanlindauer.criticalmaps.managers.LocationUpdateManager;
import de.stephanlindauer.criticalmaps.model.ChatModel;
Expand Down Expand Up @@ -36,17 +37,13 @@ public App provideApp() {
@Provides
@Singleton
public OkHttpClient provideOKHttpClient() {
return new OkHttpClient.Builder()
.connectTimeout(15, TimeUnit.SECONDS)
.build();
return new OkHttpClient.Builder().connectTimeout(15, TimeUnit.SECONDS).build();
}

@Provides
@Singleton
public Picasso providePicasso(App app, OkHttpClient client) {
return new Picasso.Builder(app)
.downloader(new OkHttp3Downloader(client))
.build();
return new Picasso.Builder(app).downloader(new OkHttp3Downloader(client)).build();
}

@Provides
Expand All @@ -58,7 +55,7 @@ public ChatModel provideChatModel() {
@Provides
@Singleton
public UserModel provideUserModel() {
return new UserModel();
return new UserModel(app);
}


Expand All @@ -76,7 +73,10 @@ public OwnLocationModel provideOwnLocationModel() {

@Provides
@Singleton
public ServerResponseProcessor serverResponseProcessor(OtherUsersLocationModel otherUsersLocationModel, EventBusProvider eventService, ChatModel chatModel) {
public ServerResponseProcessor serverResponseProcessor(
OtherUsersLocationModel otherUsersLocationModel,
EventBusProvider eventService,
ChatModel chatModel) {
return new ServerResponseProcessor(otherUsersLocationModel, eventService, chatModel);
}

Expand All @@ -94,11 +94,17 @@ public EventBusProvider provideEventBusProvider() {

@Provides
@Singleton
public LocationUpdateManager provideLocationUpdatesService(
public LocationUpdateManager provideLocationUpdateManager(
OwnLocationModel ownLocationModel,
EventBusProvider eventBusProvider) {
return new LocationUpdateManager(
app, ownLocationModel, eventBusProvider);
return new LocationUpdateManager(app, ownLocationModel, eventBusProvider);
}

@Provides
@Singleton
public NetworkConnectivityChangeHandler provideNetworkConnectivityChangeHandler(
EventBusProvider eventBusProvider) {
return new NetworkConnectivityChangeHandler(app, eventBusProvider);
}

@Provides
Expand Down
50 changes: 27 additions & 23 deletions app/src/main/java/de/stephanlindauer/criticalmaps/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.util.SimpleArrayMap;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.SparseArray;
import android.view.Menu;
import android.view.MenuItem;
import android.view.WindowManager;
Expand All @@ -21,16 +21,13 @@
import butterknife.BindView;
import java.io.File;

import javax.inject.Inject;

import butterknife.ButterKnife;
import de.stephanlindauer.criticalmaps.handler.ApplicationCloseHandler;
import de.stephanlindauer.criticalmaps.handler.PrerequisitesChecker;
import de.stephanlindauer.criticalmaps.handler.ProcessCameraResultHandler;
import de.stephanlindauer.criticalmaps.handler.StartCameraHandler;
import de.stephanlindauer.criticalmaps.helper.clientinfo.BuildInfo;
import de.stephanlindauer.criticalmaps.helper.clientinfo.DeviceInformation;
import de.stephanlindauer.criticalmaps.model.UserModel;
import de.stephanlindauer.criticalmaps.provider.FragmentProvider;
import de.stephanlindauer.criticalmaps.service.ServerSyncService;
import de.stephanlindauer.criticalmaps.utils.DrawerClosingDrawerLayoutListener;
Expand All @@ -39,13 +36,12 @@

public class Main extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

@Inject
UserModel userModel;
private final static String KEY_NAVID = "main_navid";
private final static String KEY_SAVEDFRAGMENTSTATES = "main_savedfragmentstate";

//misc
private File newCameraOutputFile;
private int currentNavId;
private final SimpleArrayMap<Integer, Fragment.SavedState> savedFragmentStates = new SimpleArrayMap<>();
private SparseArray<Fragment.SavedState> savedFragmentStates = new SparseArray<>();

@BindView(R.id.drawer_layout)
DrawerLayout drawerLayout;
Expand All @@ -68,7 +64,17 @@ protected void onPostCreate(Bundle savedInstanceState) {
drawerLayout.addDrawerListener(mDrawerToggle);
mDrawerToggle.syncState();
drawerLayout.addDrawerListener(new DrawerClosingDrawerLayoutListener());
navigateTo(R.id.navigation_map);

if (savedInstanceState != null) {
SparseArray<Fragment.SavedState> restoredStates = savedInstanceState.getSparseParcelableArray(KEY_SAVEDFRAGMENTSTATES);
if (restoredStates != null) {
savedFragmentStates = restoredStates;
}

currentNavId = savedInstanceState.getInt(KEY_NAVID);
} else {
navigateTo(R.id.navigation_map);
}
}

@Override
Expand All @@ -83,9 +89,7 @@ public void onCreate(Bundle bundle) {

new PrerequisitesChecker(this).execute();

userModel.initialize(this);

startSyncService();
ServerSyncService.startService();
}

@Override
Expand All @@ -96,7 +100,6 @@ public boolean onCreateOptionsMenu(Menu menu) {

@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case R.id.action_close:
handleCloseRequested();
Expand All @@ -112,8 +115,9 @@ public boolean onOptionsItemSelected(MenuItem item) {
break;
case R.id.rate_the_app:
startRateTheApp();
default:
break;
default:
return super.onOptionsItemSelected(item);
}
return true;
}
Expand Down Expand Up @@ -165,16 +169,18 @@ protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
}

private void startSyncService() {
Intent syncServiceIntent = new Intent(this, ServerSyncService.class);
startService(syncServiceIntent);
}

@Override
public void onAttachedToWindow() {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
}

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(KEY_NAVID, currentNavId);
outState.putSparseParcelableArray(KEY_SAVEDFRAGMENTSTATES, savedFragmentStates);
}

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
item.setChecked(true);
Expand All @@ -198,10 +204,8 @@ private void navigateTo(@IdRes int navId) {
currentNavId = navId;
final Fragment nextFragment = FragmentProvider.getFragmentForNavId(navId);

// restore saved state of new fragment if it was shown before
if (savedFragmentStates.containsKey(navId)) {
nextFragment.setInitialSavedState(savedFragmentStates.get(navId));
}
// restore saved state of new fragment if it was shown before; otherwise passing null is ok
nextFragment.setInitialSavedState(savedFragmentStates.get(navId));

getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, nextFragment).commit();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@
public final class Events {
public final static NewLocationEvent NEW_LOCATION_EVENT = new NewLocationEvent();
public final static NewServerResponseEvent NEW_SERVER_RESPONSE_EVENT = new NewServerResponseEvent();
}
public final static NetworkConnectivityChangedEvent NETWORK_CONNECTIVITY_CHANGED_EVENT = new NetworkConnectivityChangedEvent();
public final static GpsStatusChangedEvent GPS_STATUS_CHANGED_EVENT = new GpsStatusChangedEvent();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package de.stephanlindauer.criticalmaps.events;

public class GpsStatusChangedEvent {
public enum Status {
NONEXISTENT, OFF, LOW_ACCURACY, HIGH_ACCURACY
}

public Status status;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package de.stephanlindauer.criticalmaps.events;

public class NetworkConnectivityChangedEvent {
public boolean isConnected;
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import de.stephanlindauer.criticalmaps.App;
import de.stephanlindauer.criticalmaps.R;
import de.stephanlindauer.criticalmaps.adapter.ChatMessageAdapter;
import de.stephanlindauer.criticalmaps.events.NetworkConnectivityChangedEvent;
import de.stephanlindauer.criticalmaps.events.NewLocationEvent;
import de.stephanlindauer.criticalmaps.events.NewServerResponseEvent;
import de.stephanlindauer.criticalmaps.interfaces.IChatMessage;
Expand Down Expand Up @@ -78,6 +79,7 @@ public class ChatFragment extends Fragment {
//misc
private boolean isScrolling = false;
private boolean isTextInputEnabled = true;
private boolean isDataConnectionAvailable = true;
private Unbinder unbinder;


Expand Down Expand Up @@ -145,10 +147,6 @@ public void afterTextChanged(Editable s) {
setSendButtonEnabledWithAnimation(s.length() != 0);
}
});

if (ownLocationModel.ownLocation == null) {
setTextInputEnabled(false);
}
}

private void setSendButtonEnabledWithAnimation(final boolean enabled) {
Expand Down Expand Up @@ -215,22 +213,37 @@ public void onDestroyView() {
unbinder.unbind();
}

@Subscribe
public void handleNewServerData(NewServerResponseEvent e) {
chatModelToAdapter();
}

@Subscribe
public void handleNewLocation(NewLocationEvent e) {
setTextInputEnabled(true);
setTextInputState(ownLocationModel.ownLocation != null, isDataConnectionAvailable);
}

@Subscribe
public void handleNewServerData(NewServerResponseEvent e) {
chatModelToAdapter();
public void handleNetworkConnectivityChanged(NetworkConnectivityChangedEvent e) {
isDataConnectionAvailable = e.isConnected;
setTextInputState(ownLocationModel.ownLocation != null, isDataConnectionAvailable);
}

private void setTextInputEnabled(final boolean enabled) {
if (!enabled) {
private void setTextInputState(final boolean locationKnown, final boolean dataEnabled) {
if (!locationKnown || !dataEnabled) {
// FIXME fix this hacky mess of state handling
setSendButtonEnabledWithAnimation(false);
editMessageTextField.setEnabled(false);
textInputLayout.setHint(getString(R.string.map_searching_for_location));
if (dataEnabled) {
textInputLayout.setHint(getString(R.string.map_searching_for_location));
} else {
textInputLayout.setHint(getString(R.string.chat_no_data_connection_hint));
}
isTextInputEnabled = false;
} else if (!isTextInputEnabled) {
if (editMessageTextField.getText().length() > 0) {
setSendButtonEnabledWithAnimation(true);
}
editMessageTextField.setEnabled(true);
textInputLayout.setHint(getString(R.string.chat_text));
isTextInputEnabled = true;
Expand Down
Loading

0 comments on commit 5e68ee3

Please sign in to comment.