Skip to content

Commit f12f1d5

Browse files
committed
Merge branch 'skip_login' of github.com:ujjwalagrawal17/apps-android-commons
2 parents 23014e0 + bf58fca commit f12f1d5

File tree

9 files changed

+178
-13
lines changed

9 files changed

+178
-13
lines changed

app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java

+31
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import android.support.design.widget.TextInputLayout;
1717
import android.support.v4.app.NavUtils;
1818
import android.support.v4.content.ContextCompat;
19+
import android.support.v7.app.AlertDialog;
1920
import android.support.v7.app.AppCompatDelegate;
2021
import android.text.Editable;
2122
import android.text.TextWatcher;
@@ -26,6 +27,7 @@
2627
import android.widget.Button;
2728
import android.widget.EditText;
2829
import android.widget.TextView;
30+
import android.widget.Toast;
2931

3032
import java.io.IOException;
3133
import java.util.Locale;
@@ -41,6 +43,7 @@
4143
import fr.free.nrw.commons.R;
4244
import fr.free.nrw.commons.Utils;
4345
import fr.free.nrw.commons.WelcomeActivity;
46+
import fr.free.nrw.commons.category.CategoryImagesActivity;
4447
import fr.free.nrw.commons.contributions.ContributionsActivity;
4548
import fr.free.nrw.commons.di.ApplicationlessInjection;
4649
import fr.free.nrw.commons.mwapi.MediaWikiApi;
@@ -60,6 +63,7 @@
6063
public class LoginActivity extends AccountAuthenticatorActivity {
6164

6265
public static final String PARAM_USERNAME = "fr.free.nrw.commons.login.username";
66+
private static final String FEATURED_IMAGES_CATEGORY = "Category:Featured_pictures_on_Wikimedia_Commons";
6367

6468
@Inject MediaWikiApi mwApi;
6569
@Inject SessionManager sessionManager;
@@ -76,6 +80,7 @@ public class LoginActivity extends AccountAuthenticatorActivity {
7680
@BindView(R.id.login_credentials) TextView loginCredentials;
7781
@BindView(R.id.two_factor_container) TextInputLayout twoFactorContainer;
7882
@BindView(R.id.forgotPassword) HtmlTextView forgotPasswordText;
83+
@BindView(R.id.skipLogin) HtmlTextView skipLoginText;
7984

8085
ProgressDialog progressDialog;
8186
private AppCompatDelegate delegate;
@@ -125,6 +130,15 @@ public void onCreate(Bundle savedInstanceState) {
125130
signupButton.setOnClickListener(view -> signUp());
126131

127132
forgotPasswordText.setOnClickListener(view -> forgotPassword());
133+
skipLoginText.setOnClickListener(view -> new AlertDialog.Builder(this).setTitle(R.string.skip_login_title)
134+
.setMessage(R.string.skip_login_message)
135+
.setCancelable(false)
136+
.setPositiveButton(R.string.yes, (dialog, which) -> {
137+
dialog.cancel();
138+
skipLogin();
139+
})
140+
.setNegativeButton(R.string.no, (dialog, which) -> dialog.cancel())
141+
.show());
128142

129143
if(BuildConfig.FLAVOR.equals("beta")){
130144
loginCredentials.setText(getString(R.string.login_credential));
@@ -133,6 +147,17 @@ public void onCreate(Bundle savedInstanceState) {
133147
}
134148
}
135149

150+
/**
151+
* This function is called when user skips the login.
152+
* It redirects the user to Explore Activity.
153+
*/
154+
private void skipLogin() {
155+
prefs.edit().putBoolean("login_skipped", true).apply();
156+
CategoryImagesActivity.startYourself(this, getString(R.string.title_activity_explore), FEATURED_IMAGES_CATEGORY);
157+
finish();
158+
159+
}
160+
136161
private void forgotPassword() {
137162
Utils.handleWebUrl(this, Uri.parse(BuildConfig.FORGOT_PASSWORD_URL));
138163
}
@@ -159,9 +184,15 @@ protected void onResume() {
159184
if (sessionManager.getCurrentAccount() != null
160185
&& sessionManager.isUserLoggedIn()
161186
&& sessionManager.getCachedAuthCookie() != null) {
187+
prefs.edit().putBoolean("login_skipped", false).apply();
162188
sessionManager.revalidateAuthToken();
163189
startMainActivity();
164190
}
191+
192+
if (prefs.getBoolean("login_skipped", false)){
193+
skipLogin();
194+
}
195+
165196
}
166197

167198
@Override

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

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import android.support.design.widget.BottomSheetBehavior;
1616
import android.support.v4.app.FragmentTransaction;
1717
import android.support.v7.app.AlertDialog;
18-
1918
import android.view.Menu;
2019
import android.view.MenuInflater;
2120
import android.view.MenuItem;
@@ -51,8 +50,10 @@
5150
import uk.co.deanwild.materialshowcaseview.IShowcaseListener;
5251
import uk.co.deanwild.materialshowcaseview.MaterialShowcaseView;
5352

54-
import static fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType.*;
53+
import static fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType.LOCATION_SIGNIFICANTLY_CHANGED;
54+
import static fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType.LOCATION_SLIGHTLY_CHANGED;
5555
import static fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType.MAP_UPDATED;
56+
import static fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType.PERMISSION_JUST_GRANTED;
5657

5758

5859
public class NearbyActivity extends NavigationBaseActivity implements LocationUpdateListener,

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

+37-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import android.support.design.widget.BottomSheetBehavior;
1616
import android.support.design.widget.CoordinatorLayout;
1717
import android.support.design.widget.FloatingActionButton;
18+
import android.support.v7.app.AlertDialog;
1819
import android.view.Gravity;
1920
import android.view.KeyEvent;
2021
import android.view.LayoutInflater;
@@ -53,8 +54,10 @@
5354
import javax.inject.Named;
5455

5556
import dagger.android.support.DaggerFragment;
57+
import fr.free.nrw.commons.CommonsApplication;
5658
import fr.free.nrw.commons.R;
5759
import fr.free.nrw.commons.Utils;
60+
import fr.free.nrw.commons.auth.LoginActivity;
5861
import fr.free.nrw.commons.contributions.ContributionController;
5962
import fr.free.nrw.commons.utils.ContributionUtils;
6063
import fr.free.nrw.commons.utils.UriDeserializer;
@@ -68,6 +71,8 @@
6871

6972
public class NearbyMapFragment extends DaggerFragment {
7073

74+
@Inject
75+
@Named("application_preferences") SharedPreferences applicationPrefs;
7176
public MapView mapView;
7277
private List<NearbyBaseMarker> baseMarkerOptions;
7378
private fr.free.nrw.commons.location.LatLng curLatLng;
@@ -373,7 +378,23 @@ private void initViews() {
373378
}
374379

375380
private void setListeners() {
376-
fabPlus.setOnClickListener(view -> animateFAB(isFabOpen));
381+
fabPlus.setOnClickListener(view -> {
382+
if (applicationPrefs.getBoolean("login_skipped", true)) {
383+
// prompt the user to login
384+
new AlertDialog.Builder(getContext())
385+
.setMessage(R.string.login_alert_message)
386+
.setPositiveButton(R.string.login, (dialog, which) -> {
387+
// logout of the app
388+
BaseLogoutListener logoutListener = new BaseLogoutListener();
389+
CommonsApplication app = (CommonsApplication) getActivity().getApplication();
390+
app.clearApplicationData(getContext(), logoutListener);
391+
392+
})
393+
.show();
394+
}else {
395+
animateFAB(isFabOpen);
396+
}
397+
});
377398

378399
bottomSheetDetails.setOnClickListener(view -> {
379400
if (bottomSheetDetailsBehavior.getState() == BottomSheetBehavior.STATE_COLLAPSED) {
@@ -491,6 +512,21 @@ public void onMapReady(MapboxMap mapboxMap) {
491512
mapView.setStyleUrl("asset://mapstyle.json");
492513
}
493514

515+
/**
516+
* onLogoutComplete is called after shared preferences and data stored in local database are cleared.
517+
*/
518+
private class BaseLogoutListener implements CommonsApplication.LogoutListener {
519+
@Override
520+
public void onLogoutComplete() {
521+
Timber.d("Logout complete callback received.");
522+
Intent nearbyIntent = new Intent( getActivity(), LoginActivity.class);
523+
nearbyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
524+
nearbyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
525+
startActivity(nearbyIntent);
526+
getActivity().finish();
527+
}
528+
}
529+
494530
/**
495531
* Adds a marker for the user's current position. Adds a
496532
* circle which uses the accuracy * 2, to draw a circle

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

+44-10
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import android.content.SharedPreferences;
77
import android.support.v4.app.Fragment;
88
import android.support.transition.TransitionManager;
9+
import android.support.v7.app.AlertDialog;
910
import android.support.v7.widget.PopupMenu;
1011
import android.util.Log;
1112
import android.view.LayoutInflater;
@@ -27,12 +28,17 @@
2728
import butterknife.ButterKnife;
2829
import fr.free.nrw.commons.R;
2930
import fr.free.nrw.commons.Utils;
31+
import fr.free.nrw.commons.auth.LoginActivity;
3032
import fr.free.nrw.commons.contributions.ContributionController;
3133
import fr.free.nrw.commons.di.ApplicationlessInjection;
3234
import timber.log.Timber;
3335

36+
import static fr.free.nrw.commons.theme.NavigationBaseActivity.startActivityWithFlags;
37+
3438
public class PlaceRenderer extends Renderer<Place> {
3539

40+
@Inject
41+
@Named("application_preferences") SharedPreferences applicationPrefs;
3642
@BindView(R.id.tvName) TextView tvName;
3743
@BindView(R.id.tvDesc) TextView tvDesc;
3844
@BindView(R.id.distance) TextView distance;
@@ -88,9 +94,9 @@ protected void hookListeners(View view) {
8894
Log.d("Renderer", "clicked");
8995
TransitionManager.beginDelayedTransition(buttonLayout);
9096

91-
if(buttonLayout.isShown()){
97+
if (buttonLayout.isShown()) {
9298
closeLayout(buttonLayout);
93-
}else {
99+
} else {
94100
openLayout(buttonLayout);
95101
}
96102

@@ -106,18 +112,46 @@ protected void hookListeners(View view) {
106112
});
107113

108114
cameraButton.setOnClickListener(view2 -> {
109-
Timber.d("Camera button tapped. Image title: " + place.getName() + "Image desc: " + place.getLongDescription());
110-
DirectUpload directUpload = new DirectUpload(fragment, controller);
111-
storeSharedPrefs();
112-
directUpload.initiateCameraUpload();
115+
if (applicationPrefs.getBoolean("login_skipped", true)) {
116+
// prompt the user to login
117+
new AlertDialog.Builder(getContext())
118+
.setMessage(R.string.login_alert_message)
119+
.setPositiveButton(R.string.login, (dialog, which) -> {
120+
startActivityWithFlags( getContext(), LoginActivity.class, Intent.FLAG_ACTIVITY_CLEAR_TOP,
121+
Intent.FLAG_ACTIVITY_SINGLE_TOP);
122+
prefs.edit().putBoolean("login_skipped", false).apply();
123+
fragment.getActivity().finish();
124+
})
125+
.show();
126+
} else {
127+
Timber.d("Camera button tapped. Image title: " + place.getName() + "Image desc: " + place.getLongDescription());
128+
DirectUpload directUpload = new DirectUpload(fragment, controller);
129+
storeSharedPrefs();
130+
directUpload.initiateCameraUpload();
131+
}
113132
});
114133

134+
115135
galleryButton.setOnClickListener(view3 -> {
116-
Timber.d("Gallery button tapped. Image title: " + place.getName() + "Image desc: " + place.getLongDescription());
117-
DirectUpload directUpload = new DirectUpload(fragment, controller);
118-
storeSharedPrefs();
119-
directUpload.initiateGalleryUpload();
136+
if (applicationPrefs.getBoolean("login_skipped", true)) {
137+
// prompt the user to login
138+
new AlertDialog.Builder(getContext())
139+
.setMessage(R.string.login_alert_message)
140+
.setPositiveButton(R.string.login, (dialog, which) -> {
141+
startActivityWithFlags( getContext(), LoginActivity.class, Intent.FLAG_ACTIVITY_CLEAR_TOP,
142+
Intent.FLAG_ACTIVITY_SINGLE_TOP);
143+
prefs.edit().putBoolean("login_skipped", false).apply();
144+
fragment.getActivity().finish();
145+
})
146+
.show();
147+
}else {
148+
Timber.d("Gallery button tapped. Image title: " + place.getName() + "Image desc: " + place.getLongDescription());
149+
DirectUpload directUpload = new DirectUpload(fragment, controller);
150+
storeSharedPrefs();
151+
directUpload.initiateGalleryUpload();
152+
}
120153
});
154+
121155
}
122156

123157
private void storeSharedPrefs() {

app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java

+33
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,25 @@
55
import android.content.ActivityNotFoundException;
66
import android.content.Context;
77
import android.content.Intent;
8+
import android.content.SharedPreferences;
89
import android.net.Uri;
910
import android.support.annotation.NonNull;
1011
import android.support.design.widget.NavigationView;
1112
import android.support.v4.widget.DrawerLayout;
1213
import android.support.v7.app.ActionBarDrawerToggle;
1314
import android.support.v7.app.AlertDialog;
1415
import android.support.v7.widget.Toolbar;
16+
import android.view.Menu;
1517
import android.view.MenuItem;
1618
import android.view.View;
1719
import android.view.ViewGroup;
1820
import android.widget.ImageView;
1921
import android.widget.TextView;
2022
import android.widget.Toast;
2123

24+
import javax.inject.Inject;
25+
import javax.inject.Named;
26+
2227
import butterknife.BindView;
2328
import fr.free.nrw.commons.AboutActivity;
2429
import fr.free.nrw.commons.BuildConfig;
@@ -46,6 +51,8 @@ public abstract class NavigationBaseActivity extends BaseActivity
4651
NavigationView navigationView;
4752
@BindView(R.id.drawer_layout)
4853
DrawerLayout drawerLayout;
54+
@Inject @Named("application_preferences") SharedPreferences prefs;
55+
4956

5057
private ActionBarDrawerToggle toggle;
5158

@@ -61,6 +68,24 @@ public void initDrawer() {
6168
toggle.syncState();
6269
setDrawerPaneWidth();
6370
setUserName();
71+
Menu nav_Menu = navigationView.getMenu();
72+
View headerLayout = navigationView.getHeaderView(0);
73+
ImageView userIcon = headerLayout.findViewById(R.id.user_icon);
74+
if (prefs.getBoolean("login_skipped", false)) {
75+
userIcon.setVisibility(View.GONE);
76+
nav_Menu.findItem(R.id.action_login).setVisible(true);
77+
nav_Menu.findItem(R.id.action_home).setVisible(false);
78+
nav_Menu.findItem(R.id.action_notifications).setVisible(false);
79+
nav_Menu.findItem(R.id.action_settings).setVisible(false);
80+
nav_Menu.findItem(R.id.action_logout).setVisible(false);
81+
}else {
82+
userIcon.setVisibility(View.VISIBLE);
83+
nav_Menu.findItem(R.id.action_login).setVisible(false);
84+
nav_Menu.findItem(R.id.action_home).setVisible(true);
85+
nav_Menu.findItem(R.id.action_notifications).setVisible(true);
86+
nav_Menu.findItem(R.id.action_settings).setVisible(true);
87+
nav_Menu.findItem(R.id.action_logout).setVisible(true);
88+
}
6489
}
6590

6691
/**
@@ -120,6 +145,14 @@ private void setDrawerPaneWidth() {
120145
public boolean onNavigationItemSelected(@NonNull final MenuItem item) {
121146
final int itemId = item.getItemId();
122147
switch (itemId) {
148+
case R.id.action_login:
149+
drawerLayout.closeDrawer(navigationView);
150+
startActivityWithFlags(
151+
this, LoginActivity.class, Intent.FLAG_ACTIVITY_CLEAR_TOP,
152+
Intent.FLAG_ACTIVITY_SINGLE_TOP);
153+
prefs.edit().putBoolean("login_skipped", false).apply();
154+
finish();
155+
return true;
123156
case R.id.action_home:
124157
drawerLayout.closeDrawer(navigationView);
125158
startActivityWithFlags(

app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java

+8
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import android.os.Build;
1919
import android.os.Bundle;
2020
import android.os.Environment;
21+
import android.os.Handler;
2122
import android.support.annotation.NonNull;
2223
import android.support.annotation.RequiresApi;
2324
import android.support.design.widget.FloatingActionButton;
@@ -103,6 +104,7 @@ public class ShareActivity
103104
ModifierSequenceDao modifierSequenceDao;
104105
@Inject
105106
CategoryApi apiCall;
107+
@Inject @Named("application_preferences") SharedPreferences applicationPrefs;
106108
@Inject
107109
@Named("default_preferences")
108110
SharedPreferences prefs;
@@ -341,6 +343,12 @@ private void createContributionWithReceivedIntent(Bundle savedInstanceState) {
341343
checkIfFileExists();
342344
gpsObj = fileObj.processFileCoordinates(locationPermitted);
343345
decimalCoords = fileObj.getDecimalCoords();
346+
if (sessionManager.getCurrentAccount() == null) {
347+
Toast.makeText(this, getString(R.string.login_alert_message), Toast.LENGTH_SHORT).show();
348+
applicationPrefs.edit().putBoolean("login_skipped", false).apply();
349+
Intent loginIntent = new Intent(ShareActivity.this, LoginActivity.class);
350+
startActivity(loginIntent);
351+
}
344352
}
345353

346354
/**

app/src/main/res/layout/activity_login.xml

+10
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,16 @@
207207
android:layout_marginBottom="@dimen/standard_gap"
208208
android:text="@string/forgot_password" />
209209

210+
<fr.free.nrw.commons.ui.widget.HtmlTextView
211+
android:visibility="visible"
212+
android:id="@+id/skipLogin"
213+
android:layout_width="match_parent"
214+
android:gravity="center_horizontal"
215+
android:layout_height="wrap_content"
216+
android:layout_below="@id/forgotPassword"
217+
android:layout_marginBottom="@dimen/standard_gap"
218+
android:text="@string/skip_login" />
219+
210220
</RelativeLayout>
211221

212222
</android.support.v7.widget.CardView>

0 commit comments

Comments
 (0)