Skip to content

Commit bbb86e0

Browse files
committed
Updating code to include dagger ioc. Still does not build, broken on generic implementation. Needs work.
1 parent f4fd41e commit bbb86e0

12 files changed

+145
-37
lines changed

app/src/main/java/com/donnfelker/android/bootstrap/AndroidModule.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,36 @@
11
package com.donnfelker.android.bootstrap;
22

3+
import android.accounts.AccountManager;
34
import android.content.Context;
45
import android.content.SharedPreferences;
6+
import android.content.pm.ApplicationInfo;
57
import android.content.pm.PackageInfo;
68
import android.content.pm.PackageManager;
79
import android.preference.PreferenceManager;
810
import android.telephony.TelephonyManager;
911
import android.view.inputmethod.InputMethodManager;
1012

13+
import javax.inject.Singleton;
14+
1115
import dagger.Module;
1216
import dagger.Provides;
1317

14-
@Module(
18+
/**
19+
* Module for all Android related provisions
20+
*/
21+
@Module
22+
(
1523
complete = false
1624
)
1725
public class AndroidModule {
1826

27+
@Provides
28+
@Singleton
29+
Context provideAppContext()
30+
{
31+
return BootstrapApplication.getInstance().getApplicationContext();
32+
}
33+
1934
@Provides
2035
SharedPreferences provideDefaultSharedPreferences(final Context context)
2136
{
@@ -53,5 +68,19 @@ InputMethodManager provideInputMethodManager(final Context context)
5368
return (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
5469
}
5570

71+
@Provides
72+
ApplicationInfo provideApplicationInfo(final Context context) {
73+
return context.getApplicationInfo();
74+
}
75+
76+
@Provides
77+
AccountManager provideAccountManager(final Context context) {
78+
return AccountManager.get(context);
79+
}
80+
81+
@Provides
82+
ClassLoader provideClassLoader(final Context context) {
83+
return context.getClassLoader();
84+
}
5685

5786
}

app/src/main/java/com/donnfelker/android/bootstrap/BootstrapApplication.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,15 @@
1515
*/
1616
public class BootstrapApplication extends Application {
1717

18+
private static BootstrapApplication instance;
19+
1820
/**
1921
* Create main application
2022
*/
2123
public BootstrapApplication() {
24+
25+
instance = this;
26+
2227
// Disable http.keepAlive on Froyo and below
2328
if (SDK_INT <= FROYO)
2429
HttpRequest.keepAlive(false);
@@ -47,4 +52,7 @@ public BootstrapApplication(final Instrumentation instrumentation) {
4752
}
4853

4954

55+
public static BootstrapApplication getInstance() {
56+
return instance;
57+
}
5058
}
Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,18 @@
11
package com.donnfelker.android.bootstrap;
22

3-
import com.google.inject.AbstractModule;
4-
import com.google.inject.Singleton;
3+
import android.accounts.AccountManager;
4+
import android.content.Context;
5+
6+
import com.donnfelker.android.bootstrap.authenticator.LogoutService;
7+
import com.donnfelker.android.bootstrap.core.CheckIn;
8+
import com.donnfelker.android.bootstrap.ui.BootstrapTimerActivity;
9+
import com.donnfelker.android.bootstrap.ui.CarouselActivity;
10+
import com.donnfelker.android.bootstrap.ui.CheckInsListFragment;
11+
import com.donnfelker.android.bootstrap.ui.ItemListFragment;
12+
import com.donnfelker.android.bootstrap.ui.NewsActivity;
13+
import com.donnfelker.android.bootstrap.ui.NewsListFragment;
14+
import com.donnfelker.android.bootstrap.ui.UserActivity;
15+
import com.donnfelker.android.bootstrap.ui.UserListFragment;
516
import com.squareup.otto.Bus;
617

718
import javax.inject.Singleton;
@@ -11,18 +22,23 @@
1122

1223
/**
1324
* Dagger module for setting up provides statements.
25+
* Register all of your entry points below.
1426
*/
1527
@Module
1628
(
1729
complete = false,
1830

1931
entryPoints = {
20-
BootstrapApplication.class
21-
},
22-
23-
includes = {
24-
AndroidModule.class
32+
BootstrapApplication.class,
33+
CarouselActivity.class,
34+
BootstrapTimerActivity.class,
35+
CheckInsListFragment.class,
36+
NewsActivity.class,
37+
NewsListFragment.class,
38+
UserActivity.class,
39+
UserListFragment.class
2540
}
41+
2642
)
2743
public class BootstrapModule {
2844

@@ -34,4 +50,10 @@ Bus provideOttoBus() {
3450

3551
}
3652

53+
@Provides
54+
@Singleton
55+
LogoutService provideLogoutService(final Context context, final AccountManager accountManager) {
56+
return new LogoutService(context, accountManager);
57+
}
58+
3759
}

app/src/main/java/com/donnfelker/android/bootstrap/BootstrapServiceProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
package com.donnfelker.android.bootstrap;
33

44
import android.accounts.AccountsException;
5+
import android.app.Activity;
56

67
import com.donnfelker.android.bootstrap.authenticator.ApiKeyProvider;
78
import com.donnfelker.android.bootstrap.core.BootstrapService;
@@ -27,7 +28,7 @@ public class BootstrapServiceProvider {
2728
* @throws IOException
2829
* @throws AccountsException
2930
*/
30-
public BootstrapService getService() throws IOException, AccountsException {
31+
public BootstrapService getService(Activity activity) throws IOException, AccountsException {
3132
return new BootstrapService(keyProvider.getAuthKey(), userAgentProvider);
3233
}
3334
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.donnfelker.android.bootstrap;
2+
3+
import dagger.Module;
4+
5+
/**
6+
* Add all the other modules to this one.
7+
*/
8+
@Module
9+
(
10+
includes = {
11+
AndroidModule.class,
12+
BootstrapModule.class
13+
}
14+
)
15+
public class RootModule {
16+
}

app/src/main/java/com/donnfelker/android/bootstrap/authenticator/ApiKeyProvider.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
*/
2121
public class ApiKeyProvider {
2222

23-
@Inject private Activity activity;
2423
@Inject private AccountManager accountManager;
2524

2625
/**
@@ -30,7 +29,7 @@ public class ApiKeyProvider {
3029
* @throws AccountsException
3130
* @throws IOException
3231
*/
33-
public String getAuthKey() throws AccountsException, IOException {
32+
public String getAuthKey(Activity activity) throws AccountsException, IOException {
3433
AccountManagerFuture<Bundle> accountManagerFuture = accountManager.getAuthTokenByFeatures(Constants.Auth.BOOTSTRAP_ACCOUNT_TYPE,
3534
Constants.Auth.AUTHTOKEN_TYPE, new String[0], activity, null, null, null, null);
3635

app/src/main/java/com/donnfelker/android/bootstrap/authenticator/LogoutService.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,20 @@
1111

1212
import javax.inject.Inject;
1313

14-
import java.util.concurrent.Callable;
15-
import java.util.concurrent.Executor;
1614

17-
18-
// TODO-dagger: Mark this a s singleton of some sort, maybe.
19-
// @ContextSingleton
15+
/**
16+
* Class used for logging a user out.
17+
*/
2018
public class LogoutService {
2119

22-
@Inject protected Context context;
23-
@Inject protected AccountManager accountManager;
24-
20+
protected Context context;
21+
protected AccountManager accountManager;
2522

23+
@Inject
24+
public LogoutService(Context context, AccountManager accountManager) {
25+
this.context = context;
26+
this.accountManager = accountManager;
27+
}
2628

2729
public void logout(final Runnable onSuccess) {
2830

app/src/main/java/com/donnfelker/android/bootstrap/core/UserAgentProvider.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,26 @@
11
package com.donnfelker.android.bootstrap.core;
22

3-
import android.app.Application;
43
import android.content.pm.ApplicationInfo;
54
import android.content.pm.PackageInfo;
65
import android.os.Build;
76
import android.telephony.TelephonyManager;
87

8+
import com.donnfelker.android.bootstrap.BootstrapApplication;
99
import com.donnfelker.android.bootstrap.util.Ln;
1010
import com.donnfelker.android.bootstrap.util.Strings;
1111

1212
import javax.inject.Inject;
1313
import javax.inject.Provider;
14-
15-
1614
import java.lang.reflect.Method;
1715
import java.util.ArrayList;
1816
import java.util.Locale;
1917

2018

2119
public class UserAgentProvider implements Provider<String> {
22-
@Inject protected Application app;
20+
@Inject protected ApplicationInfo appInfo;
2321
@Inject protected PackageInfo info;
2422
@Inject protected TelephonyManager telephonyManager;
23+
@Inject protected ClassLoader classLoader;
2524

2625
protected String userAgent;
2726

@@ -44,13 +43,13 @@ public String get() {
4443
);
4544

4645
final ArrayList<String> params = new ArrayList<String>();
47-
params.add( "preload=" + ((app.getApplicationInfo().flags& ApplicationInfo.FLAG_SYSTEM)==1) ); // Determine if this app was a preloaded app
46+
params.add( "preload=" + ((appInfo.flags& ApplicationInfo.FLAG_SYSTEM)==1) ); // Determine if this app was a preloaded app
4847
params.add( "locale=" + Locale.getDefault() );
4948

5049

5150
// http://stackoverflow.com/questions/2641111/where-is-android-os-systemproperties
5251
try{
53-
final Class SystemProperties = app.getClassLoader().loadClass("android.os.SystemProperties");
52+
final Class SystemProperties = classLoader.loadClass("android.os.SystemProperties");
5453
final Method get = SystemProperties.getMethod("get", String.class);
5554
params.add( "clientidbase=" + get.invoke(SystemProperties, "ro.com.google.clientidbase"));
5655
}catch( Exception ignored ){

app/src/main/java/com/donnfelker/android/bootstrap/ui/CheckInsListFragment.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,19 @@
1111

1212
import com.donnfelker.android.bootstrap.BootstrapServiceProvider;
1313
import com.donnfelker.android.bootstrap.R;
14+
import com.donnfelker.android.bootstrap.authenticator.LogoutService;
1415
import com.donnfelker.android.bootstrap.core.CheckIn;
1516
import com.github.kevinsawicki.wishlist.SingleTypeAdapter;
1617
import javax.inject.Inject;
1718

1819
import javax.inject.Inject;
20+
import java.util.Collections;
1921
import java.util.List;
2022

2123
public class CheckInsListFragment extends ItemListFragment<CheckIn> {
2224

2325
@Inject protected BootstrapServiceProvider serviceProvider;
26+
@Inject protected LogoutService logoutService;
2427

2528
@Override
2629
protected void configureList(Activity activity, ListView listView) {
@@ -34,6 +37,11 @@ protected void configureList(Activity activity, ListView listView) {
3437
.inflate(R.layout.checkins_list_item_labels, null));
3538
}
3639

40+
@Override
41+
LogoutService getLogoutService() {
42+
return logoutService;
43+
}
44+
3745
@Override
3846
public void onDestroyView() {
3947
setListAdapter(null);
@@ -49,7 +57,12 @@ public Loader<List<CheckIn>> onCreateLoader(int id, Bundle args) {
4957
@Override
5058
public List<CheckIn> loadData() throws Exception {
5159
try {
52-
return serviceProvider.getService().getCheckIns();
60+
if(getActivity() != null) {
61+
return serviceProvider.getService(getActivity()).getCheckIns();
62+
} else {
63+
return Collections.emptyList();
64+
}
65+
5366
} catch (OperationCanceledException e) {
5467
Activity activity = getActivity();
5568
if (activity != null)

app/src/main/java/com/donnfelker/android/bootstrap/ui/ItemListFragment.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11

22
package com.donnfelker.android.bootstrap.ui;
33

4-
import android.accounts.AccountManager;
54
import android.app.Activity;
65
import android.os.Bundle;
76
import android.support.v4.app.LoaderManager.LoaderCallbacks;
@@ -22,18 +21,15 @@
2221
import com.actionbarsherlock.view.MenuInflater;
2322
import com.actionbarsherlock.view.MenuItem;
2423
import com.donnfelker.android.bootstrap.R;
24+
import com.donnfelker.android.bootstrap.R.id;
25+
import com.donnfelker.android.bootstrap.R.layout;
2526
import com.donnfelker.android.bootstrap.authenticator.LogoutService;
2627
import com.github.kevinsawicki.wishlist.SingleTypeAdapter;
2728
import com.github.kevinsawicki.wishlist.Toaster;
2829
import com.github.kevinsawicki.wishlist.ViewUtils;
29-
import com.donnfelker.android.bootstrap.R.id;
30-
import com.donnfelker.android.bootstrap.R.layout;
31-
import com.donnfelker.android.bootstrap.R.menu;
32-
import javax.inject.Inject;
3330

3431
import java.util.Collections;
3532
import java.util.List;
36-
import java.util.concurrent.Callable;
3733

3834

3935

@@ -46,8 +42,6 @@
4642
public abstract class ItemListFragment<E> extends SherlockFragment
4743
implements LoaderCallbacks<List<E>> {
4844

49-
@Inject protected LogoutService logoutService;
50-
5145
private static final String FORCE_REFRESH = "forceRefresh";
5246

5347
/**
@@ -172,8 +166,10 @@ public boolean onOptionsItemSelected(MenuItem item) {
172166
}
173167
}
174168

169+
abstract LogoutService getLogoutService();
170+
175171
private void logout() {
176-
logoutService.logout(new Runnable() {
172+
getLogoutService().logout(new Runnable() {
177173
@Override
178174
public void run() {
179175
// Calling a refresh will force the service to look for a logged in user

0 commit comments

Comments
 (0)