Skip to content

Commit a9e62cb

Browse files
authored
Merge pull request commons-app#1018 from neslihanturan/directNearbyUploads
Direct nearby uploads
2 parents 32bca87 + bfcb2a0 commit a9e62cb

35 files changed

+1409
-86
lines changed

app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java

Lines changed: 81 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package fr.free.nrw.commons.nearby;
22

3-
import android.content.Context;
43
import android.content.Intent;
54
import android.content.SharedPreferences;
65
import android.content.pm.PackageManager;
@@ -9,13 +8,17 @@
98
import android.os.Bundle;
109
import android.preference.PreferenceManager;
1110
import android.support.annotation.NonNull;
11+
import android.support.design.widget.BottomSheetBehavior;
12+
import android.support.design.widget.FloatingActionButton;
1213
import android.support.v4.app.Fragment;
1314
import android.support.v4.app.FragmentTransaction;
1415
import android.support.v7.app.AlertDialog;
16+
import android.util.Log;
1517
import android.view.Menu;
1618
import android.view.MenuInflater;
1719
import android.view.MenuItem;
1820
import android.view.View;
21+
import android.widget.LinearLayout;
1922
import android.widget.ProgressBar;
2023
import android.widget.Toast;
2124

@@ -41,58 +44,93 @@
4144
import io.reactivex.schedulers.Schedulers;
4245
import timber.log.Timber;
4346

44-
import static fr.free.nrw.commons.location.LocationServiceManager.LOCATION_REQUEST;
45-
4647

4748
public class NearbyActivity extends NavigationBaseActivity implements LocationUpdateListener {
4849

4950
private static final int LOCATION_REQUEST = 1;
50-
private static final String MAP_LAST_USED_PREFERENCE = "mapLastUsed";
5151

5252
@BindView(R.id.progressBar)
5353
ProgressBar progressBar;
5454

55+
@BindView(R.id.bottom_sheet)
56+
LinearLayout bottomSheet;
57+
@BindView(R.id.bottom_sheet_details)
58+
LinearLayout bottomSheetDetails;
59+
@BindView(R.id.transparentView)
60+
View transparentView;
61+
5562
@Inject
5663
LocationServiceManager locationManager;
5764
@Inject
5865
NearbyController nearbyController;
5966

6067
private LatLng curLatLang;
6168
private Bundle bundle;
62-
private SharedPreferences sharedPreferences;
6369
private NearbyActivityMode viewMode;
6470
private Disposable placesDisposable;
6571
private boolean lockNearbyView; //Determines if the nearby places needs to be refreshed
72+
private BottomSheetBehavior bottomSheetBehavior; // Behavior for list bottom sheet
73+
private BottomSheetBehavior bottomSheetBehaviorForDetails; // Behavior for details bottom sheet
74+
private NearbyMapFragment nearbyMapFragment;
75+
private static final String TAG_RETAINED_FRAGMENT = "RetainedFragment";
6676

6777
@Override
6878
protected void onCreate(Bundle savedInstanceState) {
6979
super.onCreate(savedInstanceState);
70-
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
7180
setContentView(R.layout.activity_nearby);
7281
ButterKnife.bind(this);
82+
resumeFragment();
7383
bundle = new Bundle();
84+
85+
initBottomSheetBehaviour();
7486
initDrawer();
75-
initViewState();
7687
}
7788

78-
private void initViewState() {
79-
if (sharedPreferences.getBoolean(MAP_LAST_USED_PREFERENCE, false)) {
80-
viewMode = NearbyActivityMode.MAP;
81-
} else {
82-
viewMode = NearbyActivityMode.LIST;
89+
private void resumeFragment() {
90+
// find the retained fragment on activity restarts
91+
android.support.v4.app.FragmentManager fm = getSupportFragmentManager();
92+
nearbyMapFragment = (NearbyMapFragment) fm.findFragmentByTag(TAG_RETAINED_FRAGMENT);
93+
94+
// create the fragment and data the first time
95+
if (nearbyMapFragment == null) {
96+
// add the fragment
97+
nearbyMapFragment = new NearbyMapFragment();
98+
fm.beginTransaction().add(nearbyMapFragment, TAG_RETAINED_FRAGMENT).commit();
99+
// load data from a data source or perform any calculation
83100
}
101+
102+
}
103+
104+
private void initBottomSheetBehaviour() {
105+
transparentView.setAlpha(0);
106+
107+
bottomSheet.getLayoutParams().height = getWindowManager()
108+
.getDefaultDisplay().getHeight() / 16 * 9;
109+
bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
110+
// TODO initProperBottomSheetBehavior();
111+
bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
112+
113+
@Override
114+
public void onStateChanged(View bottomSheet, int newState) {
115+
prepareViewsForSheetPosition(newState);
116+
}
117+
118+
@Override
119+
public void onSlide(View bottomSheet, float slideOffset) {
120+
121+
}
122+
});
123+
124+
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
125+
bottomSheetBehaviorForDetails = BottomSheetBehavior.from(bottomSheetDetails);
126+
bottomSheetBehaviorForDetails.setState(BottomSheetBehavior.STATE_HIDDEN);
84127
}
85128

86129
@Override
87130
public boolean onCreateOptionsMenu(Menu menu) {
88131
MenuInflater inflater = getMenuInflater();
89132
inflater.inflate(R.menu.menu_nearby, menu);
90133

91-
if (viewMode.isMap()) {
92-
MenuItem item = menu.findItem(R.id.action_toggle_view);
93-
item.setIcon(viewMode.getIcon());
94-
}
95-
96134
return super.onCreateOptionsMenu(menu);
97135
}
98136

@@ -104,10 +142,9 @@ public boolean onOptionsItemSelected(MenuItem item) {
104142
lockNearbyView(false);
105143
refreshView(true);
106144
return true;
107-
case R.id.action_toggle_view:
108-
viewMode = viewMode.toggle();
109-
item.setIcon(viewMode.getIcon());
110-
toggleView();
145+
case R.id.action_display_list:
146+
bottomSheetBehaviorForDetails.setState(BottomSheetBehavior.STATE_HIDDEN);
147+
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
111148
return true;
112149
default:
113150
return super.onOptionsItemSelected(item);
@@ -219,15 +256,6 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
219256
}
220257
}
221258

222-
private void toggleView() {
223-
if (viewMode.isMap()) {
224-
setMapFragment();
225-
} else {
226-
setListFragment();
227-
}
228-
sharedPreferences.edit().putBoolean(MAP_LAST_USED_PREFERENCE, viewMode.isMap()).apply();
229-
}
230-
231259
@Override
232260
protected void onStart() {
233261
super.onStart();
@@ -256,6 +284,21 @@ protected void onResume() {
256284
checkGps();
257285
}
258286

287+
@Override
288+
public void onPause() {
289+
super.onPause();
290+
// this means that this activity will not be recreated now, user is leaving it
291+
// or the activity is otherwise finishing
292+
if(isFinishing()) {
293+
android.support.v4.app.FragmentManager fm = getSupportFragmentManager();
294+
// we will not need this fragment anymore, this may also be a good place to signal
295+
// to the retained fragment object to perform its own cleanup.
296+
fm.beginTransaction().remove(nearbyMapFragment).commit();
297+
}
298+
}
299+
300+
301+
259302
/**
260303
* This method should be the single point to load/refresh nearby places
261304
*
@@ -306,12 +349,8 @@ private void populatePlaces(List<Place> placeList) {
306349
bundle.putString("CurLatLng", gsonCurLatLng);
307350

308351
lockNearbyView(true);
309-
// Begin the transaction
310-
if (viewMode.isMap()) {
311-
setMapFragment();
312-
} else {
313-
setListFragment();
314-
}
352+
setMapFragment();
353+
setListFragment();
315354

316355
hideProgressBar();
317356
}
@@ -352,12 +391,17 @@ private void setListFragment() {
352391
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
353392
Fragment fragment = new NearbyListFragment();
354393
fragment.setArguments(bundle);
355-
fragmentTransaction.replace(R.id.container, fragment, fragment.getClass().getSimpleName());
394+
fragmentTransaction.replace(R.id.container_sheet, fragment);
395+
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
356396
fragmentTransaction.commitAllowingStateLoss();
357397
}
358398

359399
@Override
360400
public void onLocationChanged(LatLng latLng) {
361401
refreshView(false);
362402
}
403+
404+
public void prepareViewsForSheetPosition(int bottomSheetState) {
405+
// TODO
406+
}
363407
}

app/src/main/java/fr/free/nrw/commons/nearby/NearbyAdapterFactory.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,16 @@
1010
import java.util.List;
1111

1212
class NearbyAdapterFactory {
13-
private PlaceRenderer.PlaceClickedListener listener;
1413

15-
NearbyAdapterFactory(@NonNull PlaceRenderer.PlaceClickedListener listener) {
16-
this.listener = listener;
14+
NearbyAdapterFactory(){
15+
1716
}
1817

1918
public RVRendererAdapter<Place> create(List<Place> placeList) {
2019
RendererBuilder<Place> builder = new RendererBuilder<Place>()
21-
.bind(Place.class, new PlaceRenderer(listener));
20+
.bind(Place.class, new PlaceRenderer());
2221
ListAdapteeCollection<Place> collection = new ListAdapteeCollection<>(
2322
placeList != null ? placeList : Collections.<Place>emptyList());
2423
return new RVRendererAdapter<>(builder, collection);
2524
}
26-
}
25+
}

app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.net.Uri;
44
import android.os.Bundle;
5+
import android.support.v4.app.Fragment;
56
import android.support.v7.widget.LinearLayoutManager;
67
import android.support.v7.widget.RecyclerView;
78
import android.view.LayoutInflater;
@@ -48,7 +49,7 @@ public View onCreateView(LayoutInflater inflater,
4849
View view = inflater.inflate(R.layout.fragment_nearby, container, false);
4950
recyclerView = (RecyclerView) view.findViewById(R.id.listView);
5051
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
51-
adapterFactory = new NearbyAdapterFactory(place -> NearbyInfoDialog.showYourself(getActivity(), place));
52+
adapterFactory = new NearbyAdapterFactory();
5253
return view;
5354
}
5455

@@ -71,4 +72,4 @@ public void onViewCreated(View view, Bundle savedInstanceState) {
7172

7273
recyclerView.setAdapter(adapterFactory.create(placeList));
7374
}
74-
}
75+
}

0 commit comments

Comments
 (0)