Skip to content

Commit c7c2957

Browse files
author
moddingfox
committed
app/build.gradle: Version change
app/src/main/java/open/furaffinity/client/abstractClasses/appFragment.java: Added override to back button to call a pop from the main activity used to return to the last major ui frogment app/src/main/java/open/furaffinity/client/activity/mainActivity.java: Added push/pop for storing fragment history/state and returning back to it app/src/main/java/open/furaffinity/client/fragmentDrawers/*: Calls mainActivity to store state app/src/main/java/open/furaffinity/client/fragmentDrawers/settings.java: New options for turning on/off back history app/src/main/java/open/furaffinity/client/sqlite/backContract.java: New db to store fragment back history app/src/main/java/open/furaffinity/client/sqlite/backDBHelper.java: New db to store fragment back history app/src/main/res/layout/fragment_settings.xml: New options for back history app/src/main/res/values/strings.xml: New strings for back history
1 parent c3105bf commit c7c2957

20 files changed

Lines changed: 270 additions & 6 deletions

File tree

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ android {
88
applicationId "open.furaffinity.client"
99
minSdkVersion 26
1010
targetSdkVersion 29
11-
versionCode 27
12-
versionName "0.2.7"
11+
versionCode 28
12+
versionName "0.2.8"
1313

1414
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1515
}

app/src/main/java/open/furaffinity/client/abstractClasses/appFragment.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
package open.furaffinity.client.abstractClasses;
22

3+
import android.content.Context;
4+
import android.content.SharedPreferences;
35
import android.os.Bundle;
46
import android.view.LayoutInflater;
57
import android.view.View;
68
import android.view.ViewGroup;
79

10+
import androidx.activity.OnBackPressedCallback;
811
import androidx.annotation.NonNull;
912
import androidx.fragment.app.Fragment;
1013

14+
import open.furaffinity.client.R;
15+
import open.furaffinity.client.activity.mainActivity;
16+
import open.furaffinity.client.fragmentDrawers.settings;
17+
1118
public abstract class appFragment extends Fragment {
1219
protected static final String TAG = appFragment.class.getName();
1320

@@ -30,6 +37,19 @@ public void onCreate(Bundle savedInstanceState) {
3037

3138
@Override
3239
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
40+
Context context = requireActivity();
41+
SharedPreferences sharedPref = context.getSharedPreferences(getString(R.string.settingsFile), Context.MODE_PRIVATE);
42+
43+
if (sharedPref.getBoolean(this.getString(R.string.trackBackHistorySetting), settings.trackBackHistoryDefault)) {
44+
OnBackPressedCallback callback = new OnBackPressedCallback(true) {
45+
@Override
46+
public void handleOnBackPressed() {
47+
((mainActivity) requireActivity()).drawerFragmentPop();
48+
}
49+
};
50+
this.requireActivity().getOnBackPressedDispatcher().addCallback(this.requireActivity(), callback);
51+
}
52+
3353
View rootView = inflater.inflate(getLayout(), container, false);
3454
getElements(rootView);
3555
initPages();

app/src/main/java/open/furaffinity/client/activity/mainActivity.java

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package open.furaffinity.client.activity;
22

3+
import android.content.ContentValues;
34
import android.content.Context;
45
import android.content.Intent;
56
import android.content.SharedPreferences;
7+
import android.database.Cursor;
8+
import android.database.sqlite.SQLiteDatabase;
69
import android.net.Uri;
710
import android.os.Bundle;
811
import android.view.Menu;
@@ -26,12 +29,16 @@
2629
import com.bumptech.glide.load.engine.DiskCacheStrategy;
2730
import com.google.android.material.navigation.NavigationView;
2831

32+
import java.util.Date;
2933
import java.util.regex.Matcher;
3034
import java.util.regex.Pattern;
3135

3236
import open.furaffinity.client.R;
3337
import open.furaffinity.client.abstractClasses.abstractPage;
38+
import open.furaffinity.client.fragmentDrawers.settings;
3439
import open.furaffinity.client.pages.loginCheck;
40+
import open.furaffinity.client.sqlite.backDBHelper;
41+
import open.furaffinity.client.sqlite.backContract;
3542

3643
import static open.furaffinity.client.utilities.messageIds.searchSelected_MESSAGE;
3744

@@ -71,6 +78,8 @@ public class mainActivity extends AppCompatActivity {
7178
private String userPath = null;
7279
private String viewPath = null;
7380

81+
private backDBHelper dbHelper;
82+
7483
private DrawerLayout.DrawerListener drawerListener = new DrawerLayout.DrawerListener(){
7584
@Override
7685
public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {
@@ -412,9 +421,117 @@ public void setViewPath(String pathIn) {
412421
navigationView.getMenu().performIdentifierAction(R.id.nav_view, 0);
413422
}
414423

424+
public void drawerFragmentPush(String fragmentClass, String fragmentData) {
425+
SharedPreferences sharedPref = this.getSharedPreferences(getString(R.string.settingsFile), Context.MODE_PRIVATE);
426+
427+
if (sharedPref.getBoolean(this.getString(R.string.trackBackHistorySetting), settings.trackBackHistoryDefault)) {
428+
SQLiteDatabase db = dbHelper.getWritableDatabase();
429+
430+
//Delete previous versions from history
431+
String selection = backContract.backItemEntry.COLUMN_NAME_FRAGMENT_NAME + " LIKE ? AND " + backContract.backItemEntry.COLUMN_NAME_FRAGMENT_DATA + " LIKE ?";
432+
String[] selectionArgs = { fragmentClass, fragmentData};
433+
db.delete(backContract.backItemEntry.TABLE_NAME_BACK_HISTORY, selection , selectionArgs);
434+
435+
//Insert into history
436+
ContentValues values = new ContentValues();
437+
values.put(backContract.backItemEntry.COLUMN_NAME_FRAGMENT_NAME, fragmentClass);
438+
values.put(backContract.backItemEntry.COLUMN_NAME_FRAGMENT_DATA, fragmentData);
439+
values.put(backContract.backItemEntry.COLUMN_NAME_DATETIME, (new Date()).getTime());
440+
db.insert(backContract.backItemEntry.TABLE_NAME_BACK_HISTORY, null, values);
441+
442+
//Limit history to 512 entries
443+
db.execSQL("DELETE FROM " + backContract.backItemEntry.TABLE_NAME_BACK_HISTORY + " WHERE rowid < (SELECT min(rowid) FROM (SELECT rowid FROM " + backContract.backItemEntry.TABLE_NAME_BACK_HISTORY + " ORDER BY rowid DESC LIMIT 512))");
444+
445+
db.close();
446+
}
447+
}
448+
449+
public void drawerFragmentPop() {
450+
String fragmentClass = "";
451+
String fragmentData = "";
452+
453+
SharedPreferences sharedPref = this.getSharedPreferences(getString(R.string.settingsFile), Context.MODE_PRIVATE);
454+
455+
if (sharedPref.getBoolean(this.getString(R.string.trackBackHistorySetting), settings.trackBackHistoryDefault)) {
456+
SQLiteDatabase db = dbHelper.getReadableDatabase();
457+
458+
String[] projection = {
459+
backContract.backItemEntry.COLUMN_NAME_FRAGMENT_NAME,
460+
backContract.backItemEntry.COLUMN_NAME_FRAGMENT_DATA,
461+
backContract.backItemEntry.COLUMN_NAME_DATETIME
462+
};
463+
464+
String sortOrder = "rowid DESC";
465+
466+
Cursor cursor = db.query(
467+
backContract.backItemEntry.TABLE_NAME_BACK_HISTORY,
468+
projection,
469+
null,
470+
null,
471+
null,
472+
null,
473+
sortOrder
474+
);
475+
476+
//Remove the current page from the back history as we want to leave it
477+
db.execSQL("DELETE FROM " + backContract.backItemEntry.TABLE_NAME_BACK_HISTORY + " WHERE rowid = (SELECT max(rowid) FROM " + backContract.backItemEntry.TABLE_NAME_BACK_HISTORY + ")");
478+
479+
if (cursor.moveToNext()) {
480+
fragmentClass = cursor.getString(cursor.getColumnIndexOrThrow(backContract.backItemEntry.COLUMN_NAME_FRAGMENT_NAME));
481+
fragmentData = cursor.getString(cursor.getColumnIndexOrThrow(backContract.backItemEntry.COLUMN_NAME_FRAGMENT_DATA));
482+
}
483+
484+
//Remove the previous page from the back history as we will be going back to it and dont wanna get stuck in an infinite loop of returning to the same page we are going back to
485+
db.execSQL("DELETE FROM " + backContract.backItemEntry.TABLE_NAME_BACK_HISTORY + " WHERE rowid = (SELECT max(rowid) FROM " + backContract.backItemEntry.TABLE_NAME_BACK_HISTORY + ")");
486+
}
487+
488+
if (fragmentClass.equals(open.furaffinity.client.fragmentDrawers.about.class.getName())) {
489+
navigationView.setCheckedItem(R.id.nav_about);
490+
navigationView.getMenu().performIdentifierAction(R.id.nav_about, 0);
491+
} else if (fragmentClass.equals(open.furaffinity.client.fragmentDrawers.browse.class.getName())) {
492+
navigationView.setCheckedItem(R.id.nav_browse);
493+
navigationView.getMenu().performIdentifierAction(R.id.nav_browse, 0);
494+
} else if (fragmentClass.equals(open.furaffinity.client.fragmentDrawers.history.class.getName())) {
495+
navigationView.setCheckedItem(R.id.nav_history);
496+
navigationView.getMenu().performIdentifierAction(R.id.nav_history, 0);
497+
} else if (fragmentClass.equals(open.furaffinity.client.fragmentDrawers.journal.class.getName())) {
498+
setJournalPath(fragmentData);
499+
} else if (fragmentClass.equals(open.furaffinity.client.fragmentDrawers.msgOthers.class.getName())) {
500+
navigationView.setCheckedItem(R.id.nav_msg_others);
501+
navigationView.getMenu().performIdentifierAction(R.id.nav_msg_others, 0);
502+
} else if (fragmentClass.equals(open.furaffinity.client.fragmentDrawers.msgPms.class.getName())) {
503+
navigationView.setCheckedItem(R.id.nav_msg_pms);
504+
navigationView.getMenu().performIdentifierAction(R.id.nav_msg_pms, 0);
505+
} else if (fragmentClass.equals(open.furaffinity.client.fragmentDrawers.msgSubmission.class.getName())) {
506+
navigationView.setCheckedItem(R.id.nav_msg_submission);
507+
navigationView.getMenu().performIdentifierAction(R.id.nav_msg_submission, 0);
508+
} else if (fragmentClass.equals(open.furaffinity.client.fragmentTabs.msgPmsMessage.class.getName())) {
509+
setMsgPmsPath(fragmentData);
510+
} else if (fragmentClass.equals(open.furaffinity.client.fragmentDrawers.profile.class.getName())) {
511+
navigationView.setCheckedItem(R.id.nav_profile);
512+
navigationView.getMenu().performIdentifierAction(R.id.nav_profile, 0);
513+
} else if (fragmentClass.equals(open.furaffinity.client.fragmentDrawers.profile.class.getName())) {
514+
navigationView.setCheckedItem(R.id.nav_settings);
515+
navigationView.getMenu().performIdentifierAction(R.id.nav_settings, 0);
516+
} else if (fragmentClass.equals(open.furaffinity.client.fragmentDrawers.search.class.getName())) {
517+
navigationView.setCheckedItem(R.id.nav_search);
518+
navigationView.getMenu().performIdentifierAction(R.id.nav_search, 0);
519+
} else if (fragmentClass.equals(open.furaffinity.client.fragmentDrawers.user.class.getName())) {
520+
setUserPath(fragmentData);
521+
} else if (fragmentClass.equals(open.furaffinity.client.fragmentDrawers.view.class.getName())) {
522+
setViewPath(fragmentData);
523+
} else {
524+
this.finish();
525+
System.exit(0);
526+
}
527+
}
528+
415529
@Override
416530
protected void onCreate(Bundle savedInstanceState) {
417531
super.onCreate(savedInstanceState);
532+
533+
dbHelper = new backDBHelper(this);
534+
418535
setContentView(R.layout.activity_main);
419536
System.setProperty("http.agent", "OpenFurAffinityClient");
420537

app/src/main/java/open/furaffinity/client/fragmentDrawers/about.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import open.furaffinity.client.R;
1616
import open.furaffinity.client.abstractClasses.abstractPage;
1717
import open.furaffinity.client.abstractClasses.appFragment;
18+
import open.furaffinity.client.activity.mainActivity;
1819
import open.furaffinity.client.adapter.commentListAdapter;
1920
import open.furaffinity.client.pages.user;
2021

@@ -38,6 +39,7 @@ protected void getElements(View rootView) {
3839
}
3940

4041
protected void initPages() {
42+
((mainActivity)requireActivity()).drawerFragmentPush(this.getClass().getName(), "");
4143
recyclerView.setLayoutManager(layoutManager);
4244
mAdapter = new commentListAdapter(mDataSet, getActivity(), false);
4345
recyclerView.setAdapter(mAdapter);

app/src/main/java/open/furaffinity/client/fragmentDrawers/browse.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import open.furaffinity.client.R;
2727
import open.furaffinity.client.abstractClasses.abstractPage;
2828
import open.furaffinity.client.abstractClasses.appFragment;
29+
import open.furaffinity.client.activity.mainActivity;
2930
import open.furaffinity.client.adapter.imageListAdapter;
3031
import open.furaffinity.client.listener.EndlessRecyclerViewScrollListener;
3132
import open.furaffinity.client.pages.loginCheck;
@@ -137,6 +138,8 @@ private void initCurrentSettings() {
137138
}
138139

139140
protected void initPages() {
141+
((mainActivity)requireActivity()).drawerFragmentPush(this.getClass().getName(), "");
142+
140143
if (mDataSet == null) {
141144
mDataSet = new ArrayList<>();
142145
}

app/src/main/java/open/furaffinity/client/fragmentDrawers/history.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import open.furaffinity.client.R;
1313
import open.furaffinity.client.abstractClasses.appFragment;
14+
import open.furaffinity.client.activity.mainActivity;
1415
import open.furaffinity.client.adapter.historySectionsPagerAdapter;
1516

1617
public class history extends appFragment {
@@ -29,7 +30,7 @@ protected void getElements(View rootView) {
2930

3031
@Override
3132
protected void initPages() {
32-
33+
((mainActivity)requireActivity()).drawerFragmentPush(this.getClass().getName(), "");
3334
}
3435

3536
@Override

app/src/main/java/open/furaffinity/client/fragmentDrawers/journal.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ private void saveHistory() {
113113

114114
db.close();
115115
}
116+
117+
((mainActivity)requireActivity()).drawerFragmentPush(this.getClass().getName(), page.getPagePath());
116118
}
117119

118120
@Override

app/src/main/java/open/furaffinity/client/fragmentDrawers/msgOthers.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
import open.furaffinity.client.R;
1414
import open.furaffinity.client.abstractClasses.appFragment;
15+
import open.furaffinity.client.activity.mainActivity;
1516
import open.furaffinity.client.adapter.msgOthersSectionsPagerAdapter;
1617

1718
public class msgOthers extends appFragment {
@@ -30,7 +31,7 @@ protected void getElements(View rootView) {
3031

3132
@Override
3233
protected void initPages() {
33-
34+
((mainActivity)requireActivity()).drawerFragmentPush(this.getClass().getName(), "");
3435
}
3536

3637
@Override

app/src/main/java/open/furaffinity/client/fragmentDrawers/msgPms.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import open.furaffinity.client.R;
2121
import open.furaffinity.client.abstractClasses.abstractPage;
2222
import open.furaffinity.client.abstractClasses.appFragment;
23+
import open.furaffinity.client.activity.mainActivity;
2324
import open.furaffinity.client.adapter.msgPmsListAdapter;
2425
import open.furaffinity.client.dialogs.spinnerDialog;
2526
import open.furaffinity.client.listener.EndlessRecyclerViewScrollListener;
@@ -115,6 +116,8 @@ private void resetRecycler() {
115116
}
116117

117118
protected void initPages() {
119+
((mainActivity)requireActivity()).drawerFragmentPush(this.getClass().getName(), "");
120+
118121
recyclerView.setLayoutManager(layoutManager);
119122
mAdapter = new msgPmsListAdapter(mDataSet, getActivity());
120123
recyclerView.setAdapter(mAdapter);

app/src/main/java/open/furaffinity/client/fragmentDrawers/msgSubmission.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import open.furaffinity.client.R;
2525
import open.furaffinity.client.abstractClasses.abstractPage;
2626
import open.furaffinity.client.abstractClasses.appFragment;
27+
import open.furaffinity.client.activity.mainActivity;
2728
import open.furaffinity.client.adapter.manageImageListAdapter;
2829
import open.furaffinity.client.listener.EndlessRecyclerViewScrollListener;
2930
import open.furaffinity.client.utilities.fabCircular;
@@ -154,6 +155,8 @@ private void resetRecycler() {
154155
}
155156

156157
protected void initPages() {
158+
((mainActivity)requireActivity()).drawerFragmentPush(this.getClass().getName(), "");
159+
157160
recyclerView.setLayoutManager(staggeredGridLayoutManager);
158161
mAdapter = new manageImageListAdapter(mDataSet, requireActivity(), requireActivity());
159162
recyclerView.setAdapter(mAdapter);

0 commit comments

Comments
 (0)