diff --git a/app/src/main/java/app/fedilab/fedilabtube/LoginActivity.java b/app/src/main/java/app/fedilab/fedilabtube/LoginActivity.java index cdc24f4..289efa8 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/LoginActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/LoginActivity.java @@ -387,6 +387,7 @@ public class LoginActivity extends AppCompatActivity { SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); SharedPreferences.Editor editor = sharedpreferences.edit(); editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, token.getAccess_token()); + editor.putString(Helper.PREF_SOFTWARE, software != null && software.toUpperCase().trim().compareTo("PEERTUBE") != 0 ? software : null); editor.putString(Helper.PREF_INSTANCE, host); editor.commit(); //Update the account with the token; diff --git a/app/src/main/java/app/fedilab/fedilabtube/MainActivity.java b/app/src/main/java/app/fedilab/fedilabtube/MainActivity.java index 8b31aa7..1686e50 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/MainActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/MainActivity.java @@ -939,7 +939,8 @@ public class MainActivity extends AppCompatActivity implements ChromeCastsListen public enum TypeOfConnection { UNKNOWN, NORMAL, - SURFING + SURFING, + REMOTE_ACCOUNT } private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { diff --git a/app/src/main/java/app/fedilab/fedilabtube/WebviewConnectActivity.java b/app/src/main/java/app/fedilab/fedilabtube/WebviewConnectActivity.java index 5c064d0..4b70ab9 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/WebviewConnectActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/WebviewConnectActivity.java @@ -137,9 +137,10 @@ public class WebviewConnectActivity extends AppCompatActivity { if (token != null) { SharedPreferences.Editor editor = sharedpreferences.edit(); editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, token.getAccess_token()); + editor.putString(Helper.PREF_SOFTWARE, null); editor.putString(Helper.PREF_INSTANCE, instance); editor.apply(); - updateCredential(WebviewConnectActivity.this, token.getAccess_token(), clientId, clientSecret, token.getRefresh_token(), new URL(url).getHost()); + updateCredential(WebviewConnectActivity.this, token.getAccess_token(), clientId, clientSecret, token.getRefresh_token(), new URL(url).getHost(), null); finish(); } } catch (Exception e) { diff --git a/app/src/main/java/app/fedilab/fedilabtube/client/RetrofitPeertubeAPI.java b/app/src/main/java/app/fedilab/fedilabtube/client/RetrofitPeertubeAPI.java index 92963e9..082df60 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/client/RetrofitPeertubeAPI.java +++ b/app/src/main/java/app/fedilab/fedilabtube/client/RetrofitPeertubeAPI.java @@ -241,6 +241,7 @@ public class RetrofitPeertubeAPI { SharedPreferences sharedpreferences = _context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedpreferences.edit(); editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, tokenReply.getAccess_token()); + editor.putString(Helper.PREF_SOFTWARE, null); editor.apply(); SQLiteDatabase db = Sqlite.getInstance(_context.getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); new AccountDAO(_context, db).updateAccountToken(tokenReply); diff --git a/app/src/main/java/app/fedilab/fedilabtube/client/data/AccountData.java b/app/src/main/java/app/fedilab/fedilabtube/client/data/AccountData.java index c9b9b98..b989ce6 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/client/data/AccountData.java +++ b/app/src/main/java/app/fedilab/fedilabtube/client/data/AccountData.java @@ -77,7 +77,7 @@ public class AccountData { private String client_id; private String client_secret; private String refresh_token; - + private String software; public Account() { } @@ -241,6 +241,14 @@ public class AccountData { this.userId = userId; } + public String getSoftware() { + return software; + } + + public void setSoftware(String software) { + this.software = software; + } + @Override public int describeContents() { return 0; diff --git a/app/src/main/java/app/fedilab/fedilabtube/helper/Helper.java b/app/src/main/java/app/fedilab/fedilabtube/helper/Helper.java index ea6f73e..f6b3e09 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/helper/Helper.java +++ b/app/src/main/java/app/fedilab/fedilabtube/helper/Helper.java @@ -114,6 +114,7 @@ public class Helper { public static final String OAUTH_SCOPES_MASTODON = "read write follow"; public static final String REDIRECT_CONTENT = "urn:ietf:wg:oauth:2.0:oob"; public static final String PREF_KEY_OAUTH_TOKEN = "oauth_token"; + public static final String PREF_SOFTWARE = "pref_software"; public static final Pattern redirectPattern = Pattern.compile("externalAuthToken=(\\w+)&username=([\\w.-]+)"); public static final String SET_VIDEO_CACHE = "set_video_cache"; public static final String RECEIVE_CAST_SETTINGS = "receive_cast_settings"; @@ -484,9 +485,36 @@ public class Helper { * @return boolean */ public static boolean isLoggedIn(Context context) { + return isLoggedInType(context) == MainActivity.TypeOfConnection.NORMAL; + } + + /** + * Some actions like following writing comment can be performed with remote accounts + * + * @param context Context + * @return boolean + */ + public static boolean canMakeAction(Context context) { + return (isLoggedInType(context) == MainActivity.TypeOfConnection.NORMAL || isLoggedInType(context) == MainActivity.TypeOfConnection.REMOTE_ACCOUNT); + } + + /** + * Returns boolean depending if the user is authenticated + * + * @param context Context + * @return MainActivity.TypeOfConnection + */ + private static MainActivity.TypeOfConnection isLoggedInType(Context context) { SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); String prefKeyOauthTokenT = sharedpreferences.getString(PREF_KEY_OAUTH_TOKEN, null); - return (prefKeyOauthTokenT != null); + String prefSoftware = sharedpreferences.getString(PREF_SOFTWARE, null); + if (prefKeyOauthTokenT != null && prefSoftware == null) { + return MainActivity.TypeOfConnection.NORMAL; + } else if (prefKeyOauthTokenT != null) { + return MainActivity.TypeOfConnection.REMOTE_ACCOUNT; + } else { + return MainActivity.TypeOfConnection.UNKNOWN; + } } diff --git a/app/src/main/java/app/fedilab/fedilabtube/helper/SwitchAccountHelper.java b/app/src/main/java/app/fedilab/fedilabtube/helper/SwitchAccountHelper.java index 111be3b..aaa106c 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/helper/SwitchAccountHelper.java +++ b/app/src/main/java/app/fedilab/fedilabtube/helper/SwitchAccountHelper.java @@ -55,6 +55,7 @@ public class SwitchAccountHelper { SharedPreferences sharedpreferences = activity.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); SharedPreferences.Editor editor = sharedpreferences.edit(); editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, account.getToken()); + editor.putString(Helper.PREF_SOFTWARE, account.getSoftware() != null && account.getSoftware().trim().toUpperCase().compareTo("PEERTUBE") != 0 ? account.getSoftware() : null); editor.putString(Helper.PREF_INSTANCE, account.getHost()); editor.putString(Helper.PREF_KEY_ID, account.getId()); editor.putString(Helper.PREF_KEY_NAME, account.getUsername()); diff --git a/app/src/main/java/app/fedilab/fedilabtube/sqlite/AccountDAO.java b/app/src/main/java/app/fedilab/fedilabtube/sqlite/AccountDAO.java index 1e2f767..5167ec4 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/sqlite/AccountDAO.java +++ b/app/src/main/java/app/fedilab/fedilabtube/sqlite/AccountDAO.java @@ -317,6 +317,7 @@ public class AccountDAO { account.setCreatedAt(Helper.stringToDate(context, c.getString(c.getColumnIndex(Sqlite.COL_CREATED_AT)))); account.setHost(c.getString(c.getColumnIndex(Sqlite.COL_INSTANCE))); account.setToken(c.getString(c.getColumnIndex(Sqlite.COL_OAUTHTOKEN))); + account.setSoftware(c.getString(c.getColumnIndex(Sqlite.COL_SOFTWARE))); account.setClient_id(c.getString(c.getColumnIndex(Sqlite.COL_CLIENT_ID))); account.setClient_secret(c.getString(c.getColumnIndex(Sqlite.COL_CLIENT_SECRET))); account.setRefresh_token(c.getString(c.getColumnIndex(Sqlite.COL_REFRESH_TOKEN))); @@ -357,6 +358,7 @@ public class AccountDAO { account.setCreatedAt(Helper.stringToDate(context, c.getString(c.getColumnIndex(Sqlite.COL_CREATED_AT)))); account.setHost(c.getString(c.getColumnIndex(Sqlite.COL_INSTANCE))); account.setToken(c.getString(c.getColumnIndex(Sqlite.COL_OAUTHTOKEN))); + account.setSoftware(c.getString(c.getColumnIndex(Sqlite.COL_SOFTWARE))); account.setClient_id(c.getString(c.getColumnIndex(Sqlite.COL_CLIENT_ID))); account.setClient_secret(c.getString(c.getColumnIndex(Sqlite.COL_CLIENT_SECRET))); account.setRefresh_token(c.getString(c.getColumnIndex(Sqlite.COL_REFRESH_TOKEN)));