5858import java .io .FileNotFoundException ;
5959import java .io .InputStream ;
6060import java .util .Currency ;
61+ import java .util .HashMap ;
6162import java .util .Locale ;
63+ import java .util .Map ;
6264
6365/**
6466 * Manages actions related to accounts, displaying, exporting and creating new accounts
@@ -123,12 +125,21 @@ public class AccountsActivity extends SherlockFragmentActivity implements OnAcco
123125 */
124126 public static final int INDEX_FAVORITE_ACCOUNTS_FRAGMENT = 2 ;
125127
128+ /**
129+ * Used to save the index of the last open tab and restore the pager to that index
130+ */
131+ public static final String LAST_OPEN_TAB_INDEX = "last_open_tab" ;
132+
126133 /**
127134 * Map containing fragments for the different tabs
128135 */
129- private SparseArray <Refreshable > mFragmentPageReferenceMap = new SparseArray <Refreshable >();
136+ private Map <Integer ,Refreshable > mFragmentPageReferenceMap = new HashMap <Integer , Refreshable >();
137+
138+ /**
139+ * ViewPager which manages the different tabs
140+ */
141+ private ViewPager mPager ;
130142
131-
132143 /**
133144 * Dialog which is shown to the user on first start prompting the user to create some accounts
134145 */
@@ -201,14 +212,14 @@ public void onCreate(Bundle savedInstanceState) {
201212
202213 init ();
203214
204- ViewPager pager = (ViewPager ) findViewById (R .id .pager );
215+ mPager = (ViewPager ) findViewById (R .id .pager );
205216 TitlePageIndicator titlePageIndicator = (TitlePageIndicator ) findViewById (R .id .titles );
206217
207218 final Intent intent = getIntent ();
208219 String action = intent .getAction ();
209220 if (action != null && action .equals (Intent .ACTION_INSERT_OR_EDIT )) {
210221 //enter account creation/edit mode if that was specified
211- pager .setVisibility (View .GONE );
222+ mPager .setVisibility (View .GONE );
212223 titlePageIndicator .setVisibility (View .GONE );
213224
214225 long accountId = intent .getLongExtra (UxArgument .SELECTED_ACCOUNT_ID , 0L );
@@ -219,15 +230,15 @@ public void onCreate(Bundle savedInstanceState) {
219230 showAddAccountFragment (parentAccountId );
220231 }
221232 } else if (action != null && action .equals (ACTION_VIEW_RECURRING )) {
222- pager .setVisibility (View .GONE );
233+ mPager .setVisibility (View .GONE );
223234 titlePageIndicator .setVisibility (View .GONE );
224235 showRecurringTransactionsFragment ();
225236 } else {
226237 //show the simple accounts list
227238 PagerAdapter mPagerAdapter = new AccountViewPagerAdapter (getSupportFragmentManager ());
228- pager .setAdapter (mPagerAdapter );
229- titlePageIndicator .setViewPager (pager );
230- pager .setCurrentItem (INDEX_TOP_LEVEL_ACCOUNTS_FRAGMENT );
239+ mPager .setAdapter (mPagerAdapter );
240+ titlePageIndicator .setViewPager (mPager );
241+ mPager .setCurrentItem (INDEX_TOP_LEVEL_ACCOUNTS_FRAGMENT );
231242 }
232243
233244 }
@@ -268,6 +279,16 @@ private void init() {
268279 protected void onResume () {
269280 super .onResume ();
270281 TransactionsActivity .sLastTitleColor = -1 ;
282+ SharedPreferences preferences = PreferenceManager .getDefaultSharedPreferences (this );
283+ int lastTabIndex = preferences .getInt (LAST_OPEN_TAB_INDEX , INDEX_TOP_LEVEL_ACCOUNTS_FRAGMENT );
284+ mPager .setCurrentItem (lastTabIndex );
285+ }
286+
287+ @ Override
288+ protected void onStop () {
289+ super .onPause ();
290+ SharedPreferences preferences = PreferenceManager .getDefaultSharedPreferences (this );
291+ preferences .edit ().putInt (LAST_OPEN_TAB_INDEX , mPager .getCurrentItem ()).commit ();
271292 }
272293
273294 /**
@@ -276,25 +297,19 @@ protected void onResume() {
276297 * @return <code>true</code> if the minor version has been increased, <code>false</code> otherwise.
277298 */
278299 private boolean hasNewFeatures (){
279- try {
280- PackageInfo packageInfo = getPackageManager ().getPackageInfo (getPackageName (), 0 );
281- String versionName = packageInfo .versionName ;
282- int end = versionName .indexOf ('.' );
283- int currentMinor = Integer .parseInt (versionName .substring (0 , end ));
284-
285- SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences (this );
286- int previousMinor = prefs .getInt (getString (R .string .key_previous_minor_version ), 0 );
287- if (currentMinor > previousMinor ){
288- Editor editor = prefs .edit ();
289- editor .putInt (getString (R .string .key_previous_minor_version ), currentMinor );
290- editor .commit ();
291- return true ;
292- }
293- } catch (NameNotFoundException e ) {
294- //do not show anything in that case
295- e .printStackTrace ();
296- }
297- return false ;
300+ String versionName = getResources ().getString (R .string .app_version_name );
301+ int end = versionName .indexOf ('.' );
302+ int currentMinor = Integer .parseInt (versionName .substring (0 , end ));
303+
304+ SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences (this );
305+ int previousMinor = prefs .getInt (getString (R .string .key_previous_minor_version ), 0 );
306+ if (currentMinor > previousMinor ){
307+ Editor editor = prefs .edit ();
308+ editor .putInt (getString (R .string .key_previous_minor_version ), currentMinor );
309+ editor .commit ();
310+ return true ;
311+ }
312+ return false ;
298313 }
299314
300315 /**
@@ -409,7 +424,6 @@ private void showAccountFormFragment(Bundle args){
409424 fragmentTransaction .replace (R .id .fragment_container ,
410425 accountFormFragment , AccountsActivity .FRAGMENT_NEW_ACCOUNT );
411426
412- fragmentTransaction .addToBackStack (null );
413427 fragmentTransaction .commit ();
414428 }
415429
0 commit comments