diff --git a/app/build.gradle b/app/build.gradle
index 5baea52e..81b88eb7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -4,13 +4,13 @@ apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
android {
- compileSdkVersion 27
+ compileSdkVersion 28
defaultConfig {
vectorDrawables.useSupportLibrary = true
applicationId "gr.thmmy.mthmmy"
minSdkVersion 19
- targetSdkVersion 27
+ targetSdkVersion 28
versionCode 13
versionName "1.4.1"
archivesBaseName = "mTHMMY-v$versionName"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3b37c299..72b99fbc 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -17,9 +17,10 @@
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
-
+
+
+
+
{
+ if (sessionManager.isLoggedIn()) {
+ Intent intent = new Intent(BaseActivity.this, ProfileActivity.class);
+ Bundle extras = new Bundle();
+ extras.putString(BUNDLE_PROFILE_URL, "https://www.thmmy.gr/smf/index.php?action=profile");
+ if (!sessionManager.hasAvatar())
+ extras.putString(BUNDLE_PROFILE_THUMBNAIL_URL, "");
+ else
+ extras.putString(BUNDLE_PROFILE_THUMBNAIL_URL, sessionManager.getAvatarLink());
+ extras.putString(BUNDLE_PROFILE_USERNAME, sessionManager.getUsername());
+ intent.putExtras(extras);
+ intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
+ startActivity(intent);
+ return false;
+ } else
+ startLoginActivity();
+ return true;
- }
})
.build();
@@ -360,12 +358,8 @@ public abstract class BaseActivity extends AppCompatActivity {
}
} else if (drawerItem.equals(LOG_ID)) {
if (!sessionManager.isLoggedIn()) //When logged out or if user is guest
- {
- Intent intent = new Intent(BaseActivity.this, LoginActivity.class);
- startActivity(intent);
- finish();
- overridePendingTransition(R.anim.push_right_in, R.anim.push_right_out);
- } else
+ startLoginActivity();
+ else
new LogoutTask().execute();
} else if (drawerItem.equals(ABOUT_ID)) {
if (!(BaseActivity.this instanceof AboutActivity)) {
@@ -533,18 +527,15 @@ public abstract class BaseActivity extends AppCompatActivity {
} else {
thisPageBookmarkImageButton.setImageResource(R.drawable.ic_bookmark_false_accent_24dp);
}
- thisPageBookmarkImageButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- if (thisPageBookmark.matchExists(boardsBookmarked)) {
- thisPageBookmarkImageButton.setImageResource(R.drawable.ic_bookmark_false_accent_24dp);
- Toast.makeText(getBaseContext(), "Bookmark removed", Toast.LENGTH_SHORT).show();
- } else {
- thisPageBookmarkImageButton.setImageResource(R.drawable.ic_bookmark_true_accent_24dp);
- Toast.makeText(getBaseContext(), "Bookmark added", Toast.LENGTH_SHORT).show();
- }
- toggleBoardToBookmarks(thisPageBookmark);
+ thisPageBookmarkImageButton.setOnClickListener(view -> {
+ if (thisPageBookmark.matchExists(boardsBookmarked)) {
+ thisPageBookmarkImageButton.setImageResource(R.drawable.ic_bookmark_false_accent_24dp);
+ Toast.makeText(getBaseContext(), "Bookmark removed", Toast.LENGTH_SHORT).show();
+ } else {
+ thisPageBookmarkImageButton.setImageResource(R.drawable.ic_bookmark_true_accent_24dp);
+ Toast.makeText(getBaseContext(), "Bookmark added", Toast.LENGTH_SHORT).show();
}
+ toggleBoardToBookmarks(thisPageBookmark);
});
}
@@ -743,4 +734,11 @@ public abstract class BaseActivity extends AppCompatActivity {
protected void setMainActivity(MainActivity mainActivity) {
this.mainActivity = mainActivity;
}
+
+ private void startLoginActivity(){
+ Intent intent = new Intent(BaseActivity.this, LoginActivity.class);
+ startActivity(intent);
+ finish();
+ overridePendingTransition(R.anim.push_right_in, R.anim.push_right_out);
+ }
}
diff --git a/app/src/main/java/gr/thmmy/mthmmy/base/BaseApplication.java b/app/src/main/java/gr/thmmy/mthmmy/base/BaseApplication.java
index dbd760a7..0f74807d 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/base/BaseApplication.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/base/BaseApplication.java
@@ -39,6 +39,8 @@ import okhttp3.OkHttpClient;
import okhttp3.Request;
import timber.log.Timber;
+import static gr.thmmy.mthmmy.activities.settings.SettingsFragment.SETTINGS_SHARED_PREFS;
+
public class BaseApplication extends Application {
private static BaseApplication baseApplication; //BaseApplication singleton
@@ -49,11 +51,10 @@ public class BaseApplication extends Application {
private OkHttpClient client;
private SessionManager sessionManager;
- //Shared Preferences
- private final String SHARED_PREFS_NAME = "ThmmySharedPrefs";
+ private final String SHARED_PREFS = "ThmmySharedPrefs";
//Display Metrics
- private static float dpHeight, dpWidth;
+ private static float dpWidth;
public static BaseApplication getInstance() {
return baseApplication;
@@ -64,22 +65,35 @@ public class BaseApplication extends Application {
super.onCreate();
baseApplication = this; //init singleton
- // Set up Crashlytics, disabled for debug builds
- Crashlytics crashlyticsKit = new Crashlytics.Builder()
- .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
- .build();
- // Initialize Fabric with the debug-disabled crashlytics.
- Fabric.with(this, crashlyticsKit);
- // Initialize timber
+ // Initialize Timber
if (BuildConfig.DEBUG)
Timber.plant(new Timber.DebugTree());
else
Timber.plant(new CrashReportingTree());
- // Analytics init
+ //Shared Preferences
+ SharedPreferences sharedPrefs = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
+ SharedPreferences settingsSharedPrefs = getSharedPreferences(SETTINGS_SHARED_PREFS, Context.MODE_PRIVATE);
+
+ // Set up Crashlytics, disabled for debug builds
+ if (settingsSharedPrefs.getBoolean(getString(R.string.pref_privacy_crashlytics_enable_key), false)) {
+ Crashlytics crashlyticsKit = new Crashlytics.Builder()
+ .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
+ .build();
+ // Initialize Fabric with the debug-disabled Crashlytics.
+ Fabric.with(this, crashlyticsKit);
+ Timber.i("Starting app with Crashlytics enabled.");
+ } else
+ Timber.i("Starting app with Crashlytics disabled.");
+
firebaseAnalytics = FirebaseAnalytics.getInstance(this);
+ boolean enableAnalytics = settingsSharedPrefs.getBoolean(getString(R.string.pref_privacy_analytics_enable_key), false);
+ firebaseAnalytics.setAnalyticsCollectionEnabled(enableAnalytics);
+ if(enableAnalytics)
+ Timber.i("Starting app with Analytics enabled.");
+ else
+ Timber.i("Starting app with Analytics disabled.");
- SharedPreferences sharedPrefs = getSharedPreferences(SHARED_PREFS_NAME, MODE_PRIVATE);
SharedPrefsCookiePersistor sharedPrefsCookiePersistor = new SharedPrefsCookiePersistor(getApplicationContext());
PersistentCookieJar cookieJar = new PersistentCookieJar(new SetCookieCache(), sharedPrefsCookiePersistor);
client = new OkHttpClient.Builder()
@@ -137,7 +151,6 @@ public class BaseApplication extends Application {
});
DisplayMetrics displayMetrics = getApplicationContext().getResources().getDisplayMetrics();
- dpHeight = displayMetrics.heightPixels / displayMetrics.density;
dpWidth = displayMetrics.widthPixels / displayMetrics.density;
}
@@ -145,8 +158,13 @@ public class BaseApplication extends Application {
firebaseAnalytics.logEvent(event, params);
}
- //Getters
+ public void firebaseAnalyticsCollection(boolean enabled) {
+ firebaseAnalytics.setAnalyticsCollectionEnabled(enabled);
+ if(!enabled)
+ firebaseAnalytics.resetAnalyticsData();
+ }
+ //Getters
public OkHttpClient getClient() {
return client;
}
@@ -155,10 +173,6 @@ public class BaseApplication extends Application {
return sessionManager;
}
- public float getDpHeight() {
- return dpHeight;
- }
-
public float getDpWidth() {
return dpWidth;
}
diff --git a/app/src/main/java/gr/thmmy/mthmmy/services/NotificationService.java b/app/src/main/java/gr/thmmy/mthmmy/services/NotificationService.java
index 8f27c963..a383e282 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/services/NotificationService.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/services/NotificationService.java
@@ -226,4 +226,13 @@ public class NotificationService extends FirebaseMessagingService {
}
+ /**
+ * Called if InstanceID token is updated. Note that this is called when the InstanceID token
+ * is initially generated so this is where you would retrieve the token.
+ */
+ @Override
+ public void onNewToken(String s) {
+ super.onNewToken(s);
+ Timber.i("InstanceID token updated (onNewToken)");
+ }
}
diff --git a/app/src/main/java/gr/thmmy/mthmmy/utils/parsing/ParseHelpers.java b/app/src/main/java/gr/thmmy/mthmmy/utils/parsing/ParseHelpers.java
index 52669582..2208ff04 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/utils/parsing/ParseHelpers.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/utils/parsing/ParseHelpers.java
@@ -8,8 +8,6 @@ import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import timber.log.Timber;
-
/**
* This class consists exclusively of static classes (enums) and methods (excluding methods of inner
* classes). It can be used to resolve a page's language and state or fix embedded videos html code.
diff --git a/app/src/main/java/gr/thmmy/mthmmy/viewmodel/TopicViewModel.java b/app/src/main/java/gr/thmmy/mthmmy/viewmodel/TopicViewModel.java
index ec875274..530cdc9d 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/viewmodel/TopicViewModel.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/viewmodel/TopicViewModel.java
@@ -10,12 +10,10 @@ import android.widget.LinearLayout;
import android.widget.RadioGroup;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.TimerTask;
import gr.thmmy.mthmmy.activities.settings.SettingsActivity;
-import gr.thmmy.mthmmy.activities.topic.tasks.EditTask;
import gr.thmmy.mthmmy.activities.topic.tasks.DeleteTask;
+import gr.thmmy.mthmmy.activities.topic.tasks.EditTask;
import gr.thmmy.mthmmy.activities.topic.tasks.PrepareForEditResult;
import gr.thmmy.mthmmy.activities.topic.tasks.PrepareForEditTask;
import gr.thmmy.mthmmy.activities.topic.tasks.PrepareForReply;
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 310c407f..3c133b80 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -152,8 +152,6 @@
Default home tab
Notifications
-
Vibration
Notifications led
Enables/disables the notifications led (if the device has one)
@@ -168,6 +166,14 @@
App signature
Appends an \"uploaded from mTHMMY\" message to the descriptions of your uploads
+ Privacy
+ pref_privacy_crashlytics_enable_key
+ Crash data reports
+ Automatically send us anonymized reports of errors and crashes
+ pref_privacy_analytics_enable_key
+ Analytics data reports
+ Automatically send us anonymized data for analytical purposes
+
Black
Red
diff --git a/app/src/main/res/xml/app_preferences.xml b/app/src/main/res/xml/app_preferences.xml
index 806ba3a8..82127641 100644
--- a/app/src/main/res/xml/app_preferences.xml
+++ b/app/src/main/res/xml/app_preferences.xml
@@ -2,66 +2,65 @@
-
-
+ android:title="@string/pref_title_app_main_default_tab"
+ android:summary="@string/pref_summary_app_main_default_tab" />
-
-
-
-
-
+ android:title="@string/pref_title_notification_led_enable"
+ android:summary="@string/pref_summary_notification_led_enable" />
-
+ android:title="@string/pref_title_notifications_sound"
+ android:summary="@string/pref_summary_notifications_sound" />
-
-
+ android:title="@string/pref_title_posting_app_signature_enable"
+ android:summary="@string/pref_summary_posting_app_signature_enable" />
-
+ android:title="@string/pref_title_uploading_app_signature_enable"
+ android:summary="@string/pref_summary_uploading_app_signature_enable" />
+
+
+
+
\ No newline at end of file