Skip to content

Commit dc8a056

Browse files
CanOrhanomkarmoghe
authored andcommitted
Created a wrapper for shared preference logic (#43)
* Created a wrapper for shared preference logic * Added tests * Extracted the interface for app preferences * Upgraded the version of mockito-core
1 parent 236aada commit dc8a056

File tree

10 files changed

+267
-84
lines changed

10 files changed

+267
-84
lines changed

app/build.gradle

+7
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ android {
2626
lintOptions {
2727
abortOnError false
2828
}
29+
testOptions {
30+
unitTests.returnDefaultValues = true
31+
}
2932
}
3033

3134
protobuf {
@@ -54,4 +57,8 @@ dependencies {
5457
compile 'com.squareup.retrofit2:converter-gson:2.0.0'
5558
compile 'com.squareup.okhttp:logging-interceptor:2.6.0'
5659
testCompile 'junit:junit:4.12'
60+
testCompile 'org.mockito:mockito-core:1.10.19'
61+
testCompile 'org.powermock:powermock-module-junit4:1.6.5'
62+
testCompile 'org.powermock:powermock-api-mockito:1.6.5'
63+
5764
}

app/src/androidTest/java/com/omkarmoghe/pokemap/ExampleInstrumentedTest.java

-27
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
package com.omkarmoghe.pokemap;
22

33
import android.content.Intent;
4-
import android.content.SharedPreferences;
54
import android.content.pm.PackageManager;
65
import android.os.Bundle;
7-
import android.preference.PreferenceManager;
86
import android.support.annotation.NonNull;
97
import android.support.v4.app.FragmentTransaction;
108
import android.support.v7.widget.Toolbar;
11-
import android.text.TextUtils;
129
import android.util.Log;
1310
import android.view.Menu;
1411
import android.view.MenuItem;
@@ -17,30 +14,26 @@
1714
import com.omkarmoghe.pokemap.login.RequestCredentialsDialogFragment;
1815
import com.omkarmoghe.pokemap.map.MapWrapperFragment;
1916
import com.omkarmoghe.pokemap.settings.SettingsActivity;
17+
import com.omkarmoghe.pokemap.app_preferences.PokemapAppPreferences;
18+
import com.omkarmoghe.pokemap.app_preferences.PokemapSharedPreferences;
2019

2120
public class MainActivity extends BaseActivity {
21+
private static final String TAG = "Pokemap";
2222

23-
public static final String TAG = "Pokemap";
24-
25-
// fragments
26-
private MapWrapperFragment mMapWrapperFragment;
27-
28-
// Preferences
29-
SharedPreferences pref;
23+
private PokemapAppPreferences pref;
3024

3125
@Override
3226
protected void onCreate(Bundle savedInstanceState) {
3327
super.onCreate(savedInstanceState);
3428
setContentView(R.layout.activity_main);
3529

36-
pref = PreferenceManager.getDefaultSharedPreferences(this);
30+
pref = new PokemapSharedPreferences(this);
3731

3832
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
3933
setSupportActionBar(toolbar);
4034

41-
mMapWrapperFragment = MapWrapperFragment.newInstance();
4235
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
43-
transaction.replace(R.id.main_container, mMapWrapperFragment)
36+
transaction.replace(R.id.main_container, MapWrapperFragment.newInstance())
4437
.addToBackStack(null)
4538
.commit();
4639
login();
@@ -67,15 +60,10 @@ public boolean onOptionsItemSelected(MenuItem item) {
6760

6861

6962
private void login() {
70-
71-
String username = pref.getString(getString(R.string.pref_username), "");
72-
String password = pref.getString(getString(R.string.pref_password), "");
73-
74-
if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) {
63+
if (!pref.isUsernameSet() || !pref.isPasswordSet()) {
7564
requestLoginCredentials();
7665
} else {
77-
Log.d(TAG, "Username: " + username);
78-
nianticManager.login(username, password, this);
66+
nianticManager.login(pref.getUsername(), pref.getPassword(), this);
7967
}
8068
}
8169

@@ -84,24 +72,13 @@ private void requestLoginCredentials() {
8472
new RequestCredentialsDialogFragment.Listener() {
8573
@Override
8674
public void credentialsIntroduced(String username, String password) {
87-
pref.edit().putString(getString(R.string.pref_username), username).apply();
88-
pref.edit().putString(getString(R.string.pref_password), password).apply();
89-
75+
pref.setUsername(username);
76+
pref.setPassword(password);
9077
login();
9178
}
9279
}), "request_credentials").commit();
9380
}
9481

95-
@Override
96-
protected void onStart() {
97-
super.onStart();
98-
}
99-
100-
@Override
101-
protected void onStop() {
102-
super.onStop();
103-
}
104-
10582
@Override
10683
public void onBackPressed() {
10784
this.finish();
@@ -117,6 +94,5 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
11794
}
11895
break;
11996
}
120-
//super.onRequestPermissionsResult(requestCode, permissions, grantResults);
12197
}
12298
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.omkarmoghe.pokemap.app_preferences;
2+
3+
import android.support.annotation.NonNull;
4+
5+
/**
6+
* A contract which defines a user's app preferences
7+
*/
8+
public interface PokemapAppPreferences {
9+
/**
10+
* @return true if the username has been set
11+
*/
12+
boolean isUsernameSet();
13+
14+
/**
15+
* @return true if password has been set
16+
*/
17+
boolean isPasswordSet();
18+
19+
/**
20+
* @return the username stored or an empty @see java.lang.String
21+
*/
22+
String getUsername();
23+
24+
/**
25+
* @param username that should be set
26+
*/
27+
void setUsername(@NonNull String username);
28+
29+
/**
30+
* @param password that should be set
31+
*/
32+
void setPassword(@NonNull String password);
33+
34+
/**
35+
* @return the password stored or an empty @see java.lang.String
36+
*/
37+
String getPassword();
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.omkarmoghe.pokemap.app_preferences;
2+
3+
import android.content.Context;
4+
import android.content.SharedPreferences;
5+
import android.preference.PreferenceManager;
6+
import android.support.annotation.NonNull;
7+
8+
/**
9+
* Provide convenience methods to access shared preferences
10+
*/
11+
12+
public final class PokemapSharedPreferences implements PokemapAppPreferences {
13+
private static final String USERNAME_KEY = "UsernameKey";
14+
private static final String PASSWORD_KEY = "PasswordKey";
15+
16+
private final SharedPreferences sharedPreferences;
17+
18+
public PokemapSharedPreferences(@NonNull Context context) {
19+
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
20+
}
21+
22+
@Override
23+
public boolean isUsernameSet() {
24+
return sharedPreferences.contains(USERNAME_KEY);
25+
}
26+
27+
@Override
28+
public boolean isPasswordSet() {
29+
return sharedPreferences.contains(PASSWORD_KEY);
30+
}
31+
32+
33+
@Override
34+
public String getUsername() {
35+
return sharedPreferences.getString(USERNAME_KEY, "");
36+
}
37+
38+
@Override
39+
public void setUsername(@NonNull String username) {
40+
sharedPreferences.edit().putString(USERNAME_KEY, username).apply();
41+
}
42+
43+
@Override
44+
public void setPassword(@NonNull String password) {
45+
sharedPreferences.edit().putString(PASSWORD_KEY, password).apply();
46+
}
47+
48+
@Override
49+
public String getPassword() {
50+
return sharedPreferences.getString(PASSWORD_KEY, "");
51+
}
52+
}

app/src/main/java/com/omkarmoghe/pokemap/settings/SettingsActivity.java

-3
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,17 @@
88

99
public class SettingsActivity extends AppCompatActivity {
1010

11-
1211
@Override
1312
protected void onCreate(Bundle savedInstanceState) {
1413
super.onCreate(savedInstanceState);
1514
setContentView(R.layout.activity_settings);
1615

17-
// Set toolbar
1816
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
1917
setSupportActionBar(toolbar);
2018

2119
if(getSupportActionBar() != null)
2220
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
2321

24-
// Display the fragment as the main content.
2522
getFragmentManager().beginTransaction()
2623
.replace(R.id.settings_content, new SettingsFragment())
2724
.commit();

app/src/main/res/values/strings.xml

+2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99
<string name="pref_warning">NOTE: Do NOT use your main account for this application!
1010
Instead, create and use a fake Pokémon Trainer Club account with a different password and email.</string>
1111
<string name="pref_username">Set Username</string>
12+
<string name="pref_username_key">UsernameKey</string>
1213
<string name="pref_default_username">John Doe</string>
1314
<string name="pref_password">Set Password</string>
15+
<string name="pref_password_key">PasswordKey</string>
1416
<string name="pref_default_password">***</string>
1517

1618
<string name="pref_cat_general">General</string>

app/src/main/res/xml/preferences.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
android:summary="@string/pref_warning" />
1010

1111
<EditTextPreference
12-
android:key="@string/pref_username"
12+
android:key="@string/pref_username_key"
1313
android:title="@string/pref_username"
1414
android:summary="@string/pref_default_username"/>
1515

1616
<EditTextPreference
17-
android:key="@string/pref_password"
17+
android:key="@string/pref_password_key"
1818
android:title="@string/pref_password"
1919
android:summary="@string/pref_default_password"
2020
android:inputType="textPassword" />

app/src/test/java/com/omkarmoghe/pokemap/ExampleUnitTest.java

-18
This file was deleted.

0 commit comments

Comments
 (0)