Loading app/src/main/java/app/fedilab/android/mastodon/helper/PushHelper.java +4 −2 Original line number Diff line number Diff line Loading @@ -100,9 +100,11 @@ public class PushHelper { WorkManager.getInstance(context).cancelAllWorkByTag(Helper.WORKER_REFRESH_NOTIFICATION); new Thread(() -> { List<BaseAccount> accounts = new Account(context).getPushNotificationAccounts(); if(accounts != null) { for (BaseAccount account : accounts) { ((Activity) context).runOnUiThread(() -> UnifiedPush.unregister(context, account.user_id + "@" + account.instance)); } } }).start(); break; } Loading app/src/main/java/app/fedilab/android/peertube/activities/LoginActivity.java +1 −1 Original line number Diff line number Diff line Loading @@ -184,7 +184,7 @@ public class LoginActivity extends BaseBarActivity { @SuppressLint("ApplySharedPref") private void proceedLogin(Token token, String host) { public void proceedLogin(Token token, String host) { runOnUiThread(() -> { if (token != null) { //Update the account with the token; Loading app/src/main/java/app/fedilab/android/ui/fragment/FragmentLoginMain.java +68 −3 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static app.fedilab.android.activities.LoginActivity.client_secretLogin; import static app.fedilab.android.activities.LoginActivity.currentInstanceLogin; import static app.fedilab.android.activities.LoginActivity.requestedAdmin; import static app.fedilab.android.activities.LoginActivity.softwareLogin; import static app.fedilab.android.mastodon.helper.Helper.TAG; import android.Manifest; import android.content.Intent; Loading Loading @@ -57,6 +58,7 @@ import java.net.URL; import app.fedilab.android.BaseMainActivity; import app.fedilab.android.BuildConfig; import app.fedilab.android.R; import app.fedilab.android.activities.LoginActivity; import app.fedilab.android.databinding.FragmentLoginMainBinding; import app.fedilab.android.mastodon.activities.ProxyActivity; import app.fedilab.android.mastodon.client.entities.app.Account; Loading @@ -65,10 +67,12 @@ import app.fedilab.android.mastodon.helper.Helper; import app.fedilab.android.mastodon.helper.MastodonHelper; import app.fedilab.android.mastodon.helper.ThemeHelper; import app.fedilab.android.mastodon.helper.ZipHelper; import app.fedilab.android.mastodon.viewmodel.mastodon.AccountsVM; import app.fedilab.android.mastodon.viewmodel.mastodon.AdminVM; import app.fedilab.android.mastodon.viewmodel.mastodon.AppsVM; import app.fedilab.android.mastodon.viewmodel.mastodon.InstanceSocialVM; import app.fedilab.android.mastodon.viewmodel.mastodon.NodeInfoVM; import app.fedilab.android.peertube.activities.LoginActivity; import app.fedilab.android.peertube.client.entities.Token; import es.dmoral.toasty.Toasty; public class FragmentLoginMain extends Fragment { Loading @@ -80,6 +84,15 @@ public class FragmentLoginMain extends Fragment { private String oldSearch; private ActivityResultLauncher<String> permissionLauncher; public void setUseAToken(boolean useAToken){ if(useAToken){ } else { } } public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Loading Loading @@ -168,8 +181,22 @@ public class FragmentLoginMain extends Fragment { if (currentInstanceLogin.isEmpty()) { return; } binding.continueButton.setEnabled(false); String customToken; if(binding.loginTokenLayout.getVisibility() == View.VISIBLE) { if (binding.loginToken.getText() == null || binding.loginToken.getText().toString().isEmpty()) { binding.loginTokenLayout.setError(getString(R.string.toast_error_token_empty)); binding.loginTokenLayout.setErrorEnabled(true); return; } customToken = binding.loginToken.getText().toString(); } else { customToken = null; } NodeInfoVM nodeInfoVM = new ViewModelProvider(requireActivity()).get(NodeInfoVM.class); binding.continueButton.setEnabled(false); String instance = binding.loginInstance.getText().toString().trim(); nodeInfoVM.getNodeInfo(instance).observe(requireActivity(), nodeInfo -> { if (nodeInfo != null) { Loading Loading @@ -198,6 +225,40 @@ public class FragmentLoginMain extends Fragment { softwareLogin = "MASTODON"; } if(customToken != null) { Account account = new Account(); account.token = "Bearer " + customToken; Token token = new Token(); token.setAccess_token(customToken); token.setToken_type("Bearer"); account.client_id = ""; account.client_secret = ""; account.api = apiLogin; account.software = softwareLogin; account.instance = currentInstanceLogin; AccountsVM accountsVM = new ViewModelProvider(requireActivity()).get(AccountsVM.class); accountsVM.getConnectedAccount(currentInstanceLogin, account.token).observe(requireActivity(), mastodonAccount -> { if (mastodonAccount != null) { account.mastodon_account = mastodonAccount; account.user_id = mastodonAccount.id; //We check if user have really moderator rights if (requestedAdmin) { AdminVM adminVM = new ViewModelProvider(requireActivity()).get(AdminVM.class); adminVM.getAccount(account.instance, account.token, account.user_id).observe(requireActivity(), adminAccount -> { account.admin = adminAccount != null; ((LoginActivity)requireActivity()).proceedLogin(requireActivity(), account); }); } else { ((LoginActivity)requireActivity()).proceedLogin(requireActivity(), account); } } else { Toasty.error(requireActivity(), getString(R.string.toast_fail_authenticate), Toast.LENGTH_LONG).show(); } }); return; } binding.continueButton.setEnabled(true); if (apiLogin != Account.API.PEERTUBE) { retrievesClientId(currentInstanceLogin); Loading Loading @@ -243,6 +304,10 @@ public class FragmentLoginMain extends Fragment { return false; } }); } else if(itemId == R.id.action_use_token) { item.setChecked(!item.isChecked()); binding.loginTokenLayout.setVisibility(item.isChecked()?View.VISIBLE:View.GONE); }else if (itemId == R.id.action_import_data) { if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) { permissionLauncher.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE); Loading app/src/main/res/layouts/mastodon/layout/fragment_login_main.xml +27 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:tools="http://schemas.android.com/tools" android:background="?android:windowBackground"> <androidx.appcompat.widget.AppCompatImageButton Loading @@ -35,7 +36,7 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="24dp" app:errorEnabled="true" app:layout_constraintBottom_toTopOf="@id/continue_button" app:layout_constraintBottom_toTopOf="@id/login_token_layout" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_chainStyle="packed"> Loading @@ -51,6 +52,30 @@ android:singleLine="true" /> </com.google.android.material.textfield.TextInputLayout> <com.google.android.material.textfield.TextInputLayout android:visibility="gone" tools:visibility="visible" android:id="@+id/login_token_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginHorizontal="24dp" app:errorEnabled="true" app:layout_constraintBottom_toTopOf="@id/continue_button" app:layout_constraintTop_toBottomOf="@+id/login_instance_layout" app:layout_constraintVertical_chainStyle="packed"> <com.google.android.material.textfield.MaterialAutoCompleteTextView android:id="@+id/login_token" style="@style/Widget.Material3.TextInputEditText.FilledBox" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/instance_token" android:imeOptions="actionDone" android:inputType="text" android:singleLine="true" /> </com.google.android.material.textfield.TextInputLayout> <com.google.android.material.button.MaterialButton android:id="@+id/continue_button" android:layout_width="wrap_content" Loading @@ -60,7 +85,7 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/login_instance_layout" /> app:layout_constraintTop_toBottomOf="@id/login_token_layout" /> <com.google.android.material.textview.MaterialTextView android:id="@+id/no_account_q" Loading app/src/main/res/menus/mastodon/menu/main_login.xml +5 −1 Original line number Diff line number Diff line Loading @@ -11,7 +11,11 @@ android:checkable="true" android:title="@string/admin_scope" app:actionViewClass="android.widget.CheckBox" /> <item android:id="@+id/action_use_token" android:checkable="true" android:title="@string/use_token" app:actionViewClass="android.widget.CheckBox" /> <item android:id="@+id/action_import_data" android:title="@string/import_data" Loading Loading
app/src/main/java/app/fedilab/android/mastodon/helper/PushHelper.java +4 −2 Original line number Diff line number Diff line Loading @@ -100,9 +100,11 @@ public class PushHelper { WorkManager.getInstance(context).cancelAllWorkByTag(Helper.WORKER_REFRESH_NOTIFICATION); new Thread(() -> { List<BaseAccount> accounts = new Account(context).getPushNotificationAccounts(); if(accounts != null) { for (BaseAccount account : accounts) { ((Activity) context).runOnUiThread(() -> UnifiedPush.unregister(context, account.user_id + "@" + account.instance)); } } }).start(); break; } Loading
app/src/main/java/app/fedilab/android/peertube/activities/LoginActivity.java +1 −1 Original line number Diff line number Diff line Loading @@ -184,7 +184,7 @@ public class LoginActivity extends BaseBarActivity { @SuppressLint("ApplySharedPref") private void proceedLogin(Token token, String host) { public void proceedLogin(Token token, String host) { runOnUiThread(() -> { if (token != null) { //Update the account with the token; Loading
app/src/main/java/app/fedilab/android/ui/fragment/FragmentLoginMain.java +68 −3 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static app.fedilab.android.activities.LoginActivity.client_secretLogin; import static app.fedilab.android.activities.LoginActivity.currentInstanceLogin; import static app.fedilab.android.activities.LoginActivity.requestedAdmin; import static app.fedilab.android.activities.LoginActivity.softwareLogin; import static app.fedilab.android.mastodon.helper.Helper.TAG; import android.Manifest; import android.content.Intent; Loading Loading @@ -57,6 +58,7 @@ import java.net.URL; import app.fedilab.android.BaseMainActivity; import app.fedilab.android.BuildConfig; import app.fedilab.android.R; import app.fedilab.android.activities.LoginActivity; import app.fedilab.android.databinding.FragmentLoginMainBinding; import app.fedilab.android.mastodon.activities.ProxyActivity; import app.fedilab.android.mastodon.client.entities.app.Account; Loading @@ -65,10 +67,12 @@ import app.fedilab.android.mastodon.helper.Helper; import app.fedilab.android.mastodon.helper.MastodonHelper; import app.fedilab.android.mastodon.helper.ThemeHelper; import app.fedilab.android.mastodon.helper.ZipHelper; import app.fedilab.android.mastodon.viewmodel.mastodon.AccountsVM; import app.fedilab.android.mastodon.viewmodel.mastodon.AdminVM; import app.fedilab.android.mastodon.viewmodel.mastodon.AppsVM; import app.fedilab.android.mastodon.viewmodel.mastodon.InstanceSocialVM; import app.fedilab.android.mastodon.viewmodel.mastodon.NodeInfoVM; import app.fedilab.android.peertube.activities.LoginActivity; import app.fedilab.android.peertube.client.entities.Token; import es.dmoral.toasty.Toasty; public class FragmentLoginMain extends Fragment { Loading @@ -80,6 +84,15 @@ public class FragmentLoginMain extends Fragment { private String oldSearch; private ActivityResultLauncher<String> permissionLauncher; public void setUseAToken(boolean useAToken){ if(useAToken){ } else { } } public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Loading Loading @@ -168,8 +181,22 @@ public class FragmentLoginMain extends Fragment { if (currentInstanceLogin.isEmpty()) { return; } binding.continueButton.setEnabled(false); String customToken; if(binding.loginTokenLayout.getVisibility() == View.VISIBLE) { if (binding.loginToken.getText() == null || binding.loginToken.getText().toString().isEmpty()) { binding.loginTokenLayout.setError(getString(R.string.toast_error_token_empty)); binding.loginTokenLayout.setErrorEnabled(true); return; } customToken = binding.loginToken.getText().toString(); } else { customToken = null; } NodeInfoVM nodeInfoVM = new ViewModelProvider(requireActivity()).get(NodeInfoVM.class); binding.continueButton.setEnabled(false); String instance = binding.loginInstance.getText().toString().trim(); nodeInfoVM.getNodeInfo(instance).observe(requireActivity(), nodeInfo -> { if (nodeInfo != null) { Loading Loading @@ -198,6 +225,40 @@ public class FragmentLoginMain extends Fragment { softwareLogin = "MASTODON"; } if(customToken != null) { Account account = new Account(); account.token = "Bearer " + customToken; Token token = new Token(); token.setAccess_token(customToken); token.setToken_type("Bearer"); account.client_id = ""; account.client_secret = ""; account.api = apiLogin; account.software = softwareLogin; account.instance = currentInstanceLogin; AccountsVM accountsVM = new ViewModelProvider(requireActivity()).get(AccountsVM.class); accountsVM.getConnectedAccount(currentInstanceLogin, account.token).observe(requireActivity(), mastodonAccount -> { if (mastodonAccount != null) { account.mastodon_account = mastodonAccount; account.user_id = mastodonAccount.id; //We check if user have really moderator rights if (requestedAdmin) { AdminVM adminVM = new ViewModelProvider(requireActivity()).get(AdminVM.class); adminVM.getAccount(account.instance, account.token, account.user_id).observe(requireActivity(), adminAccount -> { account.admin = adminAccount != null; ((LoginActivity)requireActivity()).proceedLogin(requireActivity(), account); }); } else { ((LoginActivity)requireActivity()).proceedLogin(requireActivity(), account); } } else { Toasty.error(requireActivity(), getString(R.string.toast_fail_authenticate), Toast.LENGTH_LONG).show(); } }); return; } binding.continueButton.setEnabled(true); if (apiLogin != Account.API.PEERTUBE) { retrievesClientId(currentInstanceLogin); Loading Loading @@ -243,6 +304,10 @@ public class FragmentLoginMain extends Fragment { return false; } }); } else if(itemId == R.id.action_use_token) { item.setChecked(!item.isChecked()); binding.loginTokenLayout.setVisibility(item.isChecked()?View.VISIBLE:View.GONE); }else if (itemId == R.id.action_import_data) { if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) { permissionLauncher.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE); Loading
app/src/main/res/layouts/mastodon/layout/fragment_login_main.xml +27 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:tools="http://schemas.android.com/tools" android:background="?android:windowBackground"> <androidx.appcompat.widget.AppCompatImageButton Loading @@ -35,7 +36,7 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="24dp" app:errorEnabled="true" app:layout_constraintBottom_toTopOf="@id/continue_button" app:layout_constraintBottom_toTopOf="@id/login_token_layout" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_chainStyle="packed"> Loading @@ -51,6 +52,30 @@ android:singleLine="true" /> </com.google.android.material.textfield.TextInputLayout> <com.google.android.material.textfield.TextInputLayout android:visibility="gone" tools:visibility="visible" android:id="@+id/login_token_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginHorizontal="24dp" app:errorEnabled="true" app:layout_constraintBottom_toTopOf="@id/continue_button" app:layout_constraintTop_toBottomOf="@+id/login_instance_layout" app:layout_constraintVertical_chainStyle="packed"> <com.google.android.material.textfield.MaterialAutoCompleteTextView android:id="@+id/login_token" style="@style/Widget.Material3.TextInputEditText.FilledBox" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/instance_token" android:imeOptions="actionDone" android:inputType="text" android:singleLine="true" /> </com.google.android.material.textfield.TextInputLayout> <com.google.android.material.button.MaterialButton android:id="@+id/continue_button" android:layout_width="wrap_content" Loading @@ -60,7 +85,7 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/login_instance_layout" /> app:layout_constraintTop_toBottomOf="@id/login_token_layout" /> <com.google.android.material.textview.MaterialTextView android:id="@+id/no_account_q" Loading
app/src/main/res/menus/mastodon/menu/main_login.xml +5 −1 Original line number Diff line number Diff line Loading @@ -11,7 +11,11 @@ android:checkable="true" android:title="@string/admin_scope" app:actionViewClass="android.widget.CheckBox" /> <item android:id="@+id/action_use_token" android:checkable="true" android:title="@string/use_token" app:actionViewClass="android.widget.CheckBox" /> <item android:id="@+id/action_import_data" android:title="@string/import_data" Loading