Skip to content

Commit c652796

Browse files
committed
Major optimization to background services and ui interactions
1 parent e7a3797 commit c652796

File tree

13 files changed

+249
-295
lines changed

13 files changed

+249
-295
lines changed

smssync/src/main/java/org/addhen/smssync/activities/BaseActivity.java

Lines changed: 98 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@
5555
import com.actionbarsherlock.view.Menu;
5656
import com.actionbarsherlock.view.MenuItem;
5757

58+
import java.util.ArrayList;
59+
import java.util.List;
60+
5861
/**
5962
* BaseActivity Add shared functionality that exists between all Activities
6063
*/
@@ -75,6 +78,13 @@ public abstract class BaseActivity<V extends View> extends SherlockFragmentActiv
7578
*/
7679
protected final Class<V> viewClass;
7780

81+
protected final int drawerLayoutId;
82+
83+
/**
84+
* ListView resource id
85+
*/
86+
protected final int listViewId;
87+
7888
/**
7989
* View
8090
*/
@@ -86,27 +96,21 @@ public abstract class BaseActivity<V extends View> extends SherlockFragmentActiv
8696

8797
protected ActionBarDrawerToggle drawerToggle;
8898

89-
protected final int drawerLayoutId;
90-
9199
protected DrawerLayout drawerLayout;
92100

93101
protected ListView listView;
94102

95-
/**
96-
* ListView resource id
97-
*/
98-
protected final int listViewId;
99-
100103
/**
101104
* BaseActivity
102-
*
103-
* @param view View class
104-
* @param layout layout resource id
105-
* @param menu menu resource id
105+
*
106+
* @param view View class
107+
* @param layout layout resource id
108+
* @param menu menu resource id
106109
* @param drawerLayoutId resource id for the drawerLayout
107-
* @param listViewId the resource id for the list view
110+
* @param listViewId the resource id for the list view
108111
*/
109-
protected BaseActivity(Class<V> view, int layout, int menu, int drawerLayoutId, int listViewId) {
112+
protected BaseActivity(Class<V> view, int layout, int menu, int drawerLayoutId,
113+
int listViewId) {
110114

111115
this.viewClass = view;
112116
this.layout = layout;
@@ -117,10 +121,10 @@ protected BaseActivity(Class<V> view, int layout, int menu, int drawerLayoutId,
117121

118122
/**
119123
* BaseActivity
120-
*
121-
* @param view View class
124+
*
125+
* @param view View class
122126
* @param layout layout resource id
123-
* @param menu menu resource id
127+
* @param menu menu resource id
124128
*/
125129
protected BaseActivity(Class<V> view, int layout, int menu) {
126130
this(view, layout, menu, 0, 0);
@@ -136,11 +140,13 @@ public void onCreate(Bundle savedInstanceState) {
136140
setContentView(layout);
137141
}
138142

139-
if (drawerLayoutId != 0)
143+
if (drawerLayoutId != 0) {
140144
drawerLayout = (DrawerLayout) findViewById(drawerLayoutId);
145+
}
141146

142-
if (listViewId != 0)
147+
if (listViewId != 0) {
143148
listView = (ListView) findViewById(listViewId);
149+
}
144150

145151
view = Objects.createInstance(viewClass, Activity.class, this);
146152

@@ -233,7 +239,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
233239
} else {
234240
drawerLayout.openDrawer(listView);
235241
}
236-
242+
237243
} else {
238244
finish();
239245
}
@@ -254,18 +260,7 @@ public void openActivityOrFragment(Intent intent) {
254260

255261
protected void createNavDrawer() {
256262
navDrawerAdapter = new NavDrawerAdapter(this);
257-
new LoadingStatusTask(this).execute((String)null);
258-
259-
}
260-
261-
private class NavDrawerItemClickListener implements ListView.OnItemClickListener {
262-
263-
@Override
264-
public void onItemClick(AdapterView<?> parent, android.view.View view, int position, long id) {
265-
selectItem(position);
266-
view.getFocusables(position);
267-
view.setSelected(true);
268-
}
263+
new NavDrawerItemTask(this).execute((String) null);
269264

270265
}
271266

@@ -315,50 +310,25 @@ public void onDrawerOpened(android.view.View drawerView) {
315310
}
316311

317312
/**
318-
* When using the ActionBarDrawerToggle, you must call it during
319-
* onPostCreate() and onConfigurationChanged()...
313+
* When using the ActionBarDrawerToggle, you must call it during onPostCreate() and
314+
* onConfigurationChanged()...
320315
*/
321316

322317
@Override
323318
protected void onPostCreate(Bundle savedInstanceState) {
324319
super.onPostCreate(savedInstanceState);
325320
// Sync the toggle state after onRestoreInstanceState has occurred.
326-
if (drawerToggle != null)
321+
if (drawerToggle != null) {
327322
drawerToggle.syncState();
323+
}
328324
}
329325

330326
@Override
331327
public void onConfigurationChanged(Configuration newConfig) {
332328
super.onConfigurationChanged(newConfig);
333329
// Pass any configuration change to the drawer toggls
334-
if (drawerToggle != null)
330+
if (drawerToggle != null) {
335331
drawerToggle.onConfigurationChanged(newConfig);
336-
}
337-
338-
private class LoadingStatusTask extends ProgressTask {
339-
340-
protected LoadingStatusTask(Activity activity) {
341-
super(activity);
342-
}
343-
344-
@Override
345-
protected void onPreExecute() {
346-
super.onPreExecute();
347-
dialog.cancel();
348-
}
349-
350-
@Override
351-
protected Boolean doInBackground(String... strings) {
352-
// load all checked syncurl
353-
navDrawerAdapter.refresh();
354-
return true;
355-
}
356-
357-
@Override
358-
protected void onPostExecute(Boolean success) {
359-
super.onPostExecute(success);
360-
initNavDrawer();
361-
selectItem(0);
362332
}
363333
}
364334

@@ -438,4 +408,71 @@ protected void toastShort(CharSequence message) {
438408
Toast.makeText(this, message.toString(), Toast.LENGTH_SHORT).show();
439409
}
440410

411+
private class NavDrawerItemClickListener implements ListView.OnItemClickListener {
412+
413+
@Override
414+
public void onItemClick(AdapterView<?> parent, android.view.View view, int position,
415+
long id) {
416+
selectItem(position);
417+
view.getFocusables(position);
418+
view.setSelected(true);
419+
}
420+
421+
}
422+
423+
private class NavDrawerItemTask extends ProgressTask {
424+
425+
PendingMessagesNavDrawerItem pendingMessagesNavDrawerItem;
426+
427+
SentMessagesNavDrawerItem sentMessagesNavDrawerItem;
428+
429+
SyncUrlNavDrawerItem syncUrlNavDrawerItem;
430+
431+
List<BaseNavDrawerItem> navDrawerItem;
432+
433+
protected NavDrawerItemTask(Activity activity) {
434+
super(activity);
435+
pendingMessagesNavDrawerItem
436+
= new PendingMessagesNavDrawerItem(
437+
getString(R.string.pending_messages),
438+
R.drawable.pending, BaseActivity.this);
439+
440+
sentMessagesNavDrawerItem = new SentMessagesNavDrawerItem(
441+
getString(R.string.sent_messages),
442+
R.drawable.sent, BaseActivity.this);
443+
syncUrlNavDrawerItem = new SyncUrlNavDrawerItem(getString(
444+
R.string.sync_url),
445+
R.drawable.sync_url, BaseActivity.this);
446+
navDrawerItem = new ArrayList<BaseNavDrawerItem>();
447+
448+
}
449+
450+
@Override
451+
protected void onPreExecute() {
452+
super.onPreExecute();
453+
dialog.cancel();
454+
}
455+
456+
@Override
457+
protected Boolean doInBackground(String... strings) {
458+
// load all checked syncurl
459+
sentMessagesNavDrawerItem.setCounter();
460+
pendingMessagesNavDrawerItem.setCounter();
461+
syncUrlNavDrawerItem.setCounter();
462+
navDrawerItem.add(pendingMessagesNavDrawerItem);
463+
navDrawerItem.add(sentMessagesNavDrawerItem);
464+
navDrawerItem.add(syncUrlNavDrawerItem);
465+
466+
return true;
467+
}
468+
469+
@Override
470+
protected void onPostExecute(Boolean success) {
471+
super.onPostExecute(success);
472+
navDrawerAdapter.setItems(navDrawerItem);
473+
initNavDrawer();
474+
selectItem(0);
475+
}
476+
}
477+
441478
}

smssync/src/main/java/org/addhen/smssync/adapters/NavDrawerAdapter.java

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,12 @@
4040
*/
4141
public class NavDrawerAdapter extends BaseListAdapter<BaseNavDrawerItem> {
4242

43-
private SherlockFragmentActivity mActivity;
4443

4544
/**
46-
* @param activity
45+
* @param context
4746
*/
48-
public NavDrawerAdapter(SherlockFragmentActivity activity) {
49-
super(activity);
50-
this.mActivity = activity;
47+
public NavDrawerAdapter(Context context) {
48+
super(context);
5149
}
5250

5351
@Override
@@ -84,24 +82,6 @@ public View getView(int position, View convertView, ViewGroup parent) {
8482
*/
8583
@Override
8684
public void refresh() {
87-
PendingMessagesNavDrawerItem pendingMessagesNavDrawerItem
88-
= new PendingMessagesNavDrawerItem(
89-
context.getString(R.string.pending_messages),
90-
R.drawable.pending, mActivity);
91-
pendingMessagesNavDrawerItem.setCounter();
92-
addItem(pendingMessagesNavDrawerItem);
93-
94-
SentMessagesNavDrawerItem sentMessagesNavDrawerItem = new SentMessagesNavDrawerItem(
95-
context.getString(R.string.sent_messages),
96-
R.drawable.sent, mActivity);
97-
sentMessagesNavDrawerItem.setCounter();
98-
addItem(sentMessagesNavDrawerItem);
99-
100-
SyncUrlNavDrawerItem syncUrlNavDrawerItem = new SyncUrlNavDrawerItem(context.getString(
101-
R.string.sync_url),
102-
R.drawable.sync_url, mActivity);
103-
syncUrlNavDrawerItem.setCounter();
104-
addItem(syncUrlNavDrawerItem);
10585
}
10686

10787
private class Widgets {

smssync/src/main/java/org/addhen/smssync/database/SyncUrlContentProvider.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
package org.addhen.smssync.database;
2222

2323
import org.addhen.smssync.models.SyncUrl;
24+
import org.addhen.smssync.util.Logger;
2425
import org.addhen.smssync.util.Util;
2526

2627
import android.content.ContentValues;
@@ -48,11 +49,12 @@ public SyncUrlContentProvider(SQLiteDatabase db) {
4849

4950
@Override
5051
public List<SyncUrl> fetchSyncUrl() {
51-
mListSyncUrl = new ArrayList<SyncUrl>();
5252

5353
try {
54+
cursor = super.query(TABLE, COLUMNS, null, null, ID);
5455
if (cursor != null) {
55-
cursor = super.query(TABLE, COLUMNS, null, null, ID);
56+
57+
mListSyncUrl = new ArrayList<SyncUrl>();
5658
while (cursor.moveToNext()) {
5759
SyncUrl syncUrl = cursorToEntity(cursor);
5860
mListSyncUrl.add(syncUrl);

smssync/src/main/java/org/addhen/smssync/fragments/PendingMessages.java

Lines changed: 4 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -67,53 +67,6 @@ public class PendingMessages
6767

6868
private static final String STATE_CHECKED = "org.addhen.smssync.fragments.STATE_CHECKED";
6969

70-
/**
71-
* Delete individual messages 0 - Successfully deleted. 1 - There is nothing to be deleted.
72-
*/
73-
final Runnable mDeleteMessagesById = new Runnable() {
74-
public void run() {
75-
log("mDeleteMessagesById()");
76-
getActivity().setProgressBarIndeterminateVisibility(true);
77-
boolean result = false;
78-
79-
int deleted = 0;
80-
81-
if (adapter.getCount() == 0) {
82-
deleted = 1;
83-
} else {
84-
log("deletebyId position: " + mSelectedItemsPositions.size());
85-
for (Integer position : mSelectedItemsPositions) {
86-
model.deleteMessagesByUuid(adapter.getItem(position).getUuid());
87-
}
88-
result = true;
89-
}
90-
91-
try {
92-
if (deleted == 1) {
93-
toastLong(R.string.no_messages_to_delete);
94-
} else {
95-
96-
if (result) {
97-
toastLong(R.string.messages_deleted);
98-
99-
} else {
100-
toastLong(R.string.messages_deleted_failed);
101-
}
102-
}
103-
104-
// destory the action mode dialog
105-
multichoiceActionModeListener.activeMode.finish();
106-
multichoiceActionModeListener.getSelectedItemPositions().clear();
107-
getActivity().setProgressBarIndeterminateVisibility(false);
108-
refreshListView();
109-
} catch (Exception e) {
110-
return;
111-
}
112-
}
113-
};
114-
115-
private final Handler mHandler;
116-
11770
private Intent syncPendingMessagesServiceIntent;
11871

11972
private Message model;
@@ -187,7 +140,6 @@ public PendingMessages() {
187140
R.layout.list_messages, R.menu.pending_messages_menu,
188141
android.R.id.list);
189142
log("PendingMessages()");
190-
mHandler = new Handler();
191143
model = new Message();
192144
}
193145

@@ -688,8 +640,10 @@ protected void onPostExecute(Boolean success) {
688640
}
689641
}
690642
adapter.setItems(model.getMessageList());
691-
multichoiceActionModeListener.activeMode.finish();
692-
multichoiceActionModeListener.getSelectedItemPositions().clear();
643+
if (multichoiceActionModeListener.activeMode != null) {
644+
multichoiceActionModeListener.activeMode.finish();
645+
multichoiceActionModeListener.getSelectedItemPositions().clear();
646+
}
693647
listView.setAdapter(adapter);
694648
}
695649
}

0 commit comments

Comments
 (0)