Add back custom tabs

This commit is contained in:
Thomas 2023-02-09 17:23:51 +01:00
parent a6c17512cc
commit 7ce644e922
6 changed files with 78 additions and 36 deletions

View File

@ -76,6 +76,8 @@ import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.browser.customtabs.CustomTabColorSchemeParams;
import androidx.browser.customtabs.CustomTabsIntent;
import androidx.core.app.ActivityOptionsCompat;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
@ -646,16 +648,29 @@ public class Helper {
if (url == null) {
return;
}
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (!url.toLowerCase().startsWith("http://") && !url.toLowerCase().startsWith("https://") && !url.toLowerCase().startsWith("gemini://")) {
url = "http://" + url;
}
intent.setData(Uri.parse(url));
try {
context.startActivity(intent);
} catch (Exception e) {
Toasty.error(context, context.getString(R.string.toast_error), Toast.LENGTH_LONG).show();
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
boolean customTab = sharedpreferences.getBoolean(context.getString(R.string.SET_CUSTOM_TABS), true);
if (customTab) {
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
int colorInt = ThemeHelper.getAttColor(context, R.attr.statusBar);
CustomTabColorSchemeParams defaultColors = new CustomTabColorSchemeParams.Builder()
.setToolbarColor(colorInt)
.build();
builder.setDefaultColorSchemeParams(defaultColors);
CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.launchUrl(context, Uri.parse(url));
} else {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (!url.toLowerCase().startsWith("http://") && !url.toLowerCase().startsWith("https://") && !url.toLowerCase().startsWith("gemini://")) {
url = "http://" + url;
}
intent.setData(Uri.parse(url));
try {
context.startActivity(intent);
} catch (Exception e) {
Toasty.error(context, context.getString(R.string.toast_error), Toast.LENGTH_LONG).show();
}
}
}

View File

@ -25,6 +25,7 @@ import static app.fedilab.android.activities.LoginActivity.softwareLogin;
import android.Manifest;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
@ -43,9 +44,12 @@ import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.PopupMenu;
import androidx.browser.customtabs.CustomTabColorSchemeParams;
import androidx.browser.customtabs.CustomTabsIntent;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.preference.PreferenceManager;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
@ -60,6 +64,7 @@ import app.fedilab.android.mastodon.client.entities.app.Account;
import app.fedilab.android.mastodon.client.entities.app.InstanceSocial;
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.AppsVM;
import app.fedilab.android.mastodon.viewmodel.mastodon.InstanceSocialVM;
@ -214,6 +219,10 @@ public class FragmentLoginMain extends Fragment {
menuInflater.inflate(R.menu.main_login, popupMenu.getMenu());
MenuItem adminTabItem = popupMenu.getMenu().findItem(R.id.action_request_admin);
adminTabItem.setChecked(requestedAdmin);
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity());
boolean customTab = sharedpreferences.getBoolean(getString(R.string.SET_CUSTOM_TABS), true);
popupMenu.getMenu().findItem(R.id.action_custom_tabs).setChecked(customTab);
popupMenu.setOnMenuItemClickListener(item -> {
int itemId = item.getItemId();
if (itemId == R.id.action_proxy) {
@ -242,6 +251,13 @@ public class FragmentLoginMain extends Fragment {
} else {
proceed();
}
} else if (itemId == R.id.action_custom_tabs) {
boolean newValue = !item.isChecked();
item.setChecked(newValue);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(getString(R.string.SET_CUSTOM_TABS), newValue);
editor.apply();
return false;
}
return false;
});
@ -291,13 +307,26 @@ public class FragmentLoginMain extends Fragment {
client_idLogin = app.client_id;
client_secretLogin = app.client_secret;
String redirectUrl = MastodonHelper.authorizeURL(currentInstanceLogin, client_idLogin, requestedAdmin);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse(redirectUrl));
try {
startActivity(intent);
} catch (Exception e) {
Toasty.error(requireActivity(), getString(R.string.toast_error), Toast.LENGTH_LONG).show();
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity());
boolean customTab = sharedpreferences.getBoolean(getString(R.string.SET_CUSTOM_TABS), true);
if (customTab) {
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
int colorInt = ThemeHelper.getAttColor(requireActivity(), R.attr.statusBar);
CustomTabColorSchemeParams defaultColors = new CustomTabColorSchemeParams.Builder()
.setToolbarColor(colorInt)
.build();
builder.setDefaultColorSchemeParams(defaultColors);
CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.launchUrl(requireActivity(), Uri.parse(redirectUrl));
} else {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse(redirectUrl));
try {
startActivity(intent);
} catch (Exception e) {
Toasty.error(requireActivity(), getString(R.string.toast_error), Toast.LENGTH_LONG).show();
}
}
} else {
Toasty.error(requireActivity(), getString(R.string.client_error), Toasty.LENGTH_SHORT).show();

View File

@ -1,17 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!--
<item
android:id="@+id/action_about"
android:title="@string/action_about"
app:showAsAction="never" />
<item
android:id="@+id/action_privacy"
android:title="@string/action_privacy"
app:showAsAction="never" />
-->
<item
android:id="@+id/action_proxy"
android:title="@string/proxy_set"
@ -27,11 +17,10 @@
android:title="@string/import_data"
app:showAsAction="never" />
<!--
<item
android:id="@+id/action_provider"
android:checkable="true"
android:title="@string/set_security_provider"
app:actionViewClass="android.widget.CheckBox" />
-->
<item
android:id="@+id/action_custom_tabs"
android:checkable="true"
android:title="@string/custom_tabs"
app:actionViewClass="android.widget.CheckBox" />
</menu>

View File

@ -1509,6 +1509,7 @@
<string name="SET_NITTER_HOST" translatable="false">SET_NITTER_HOST</string>
<string name="DEFAULT_NITTER_HOST" translatable="false">nitter.net</string>
<string name="SET_USE_CACHE" translatable="false">SET_USE_CACHE</string>
<string name="SET_CUSTOM_TABS" translatable="false">SET_CUSTOM_TABS</string>
<string name="SET_BIBLIOGRAM" translatable="false">SET_BIBLIOGRAM</string>
<string name="SET_BIBLIOGRAM_HOST" translatable="false">SET_BIBLIOGRAM_HOST</string>
<string name="DEFAULT_BIBLIOGRAM_HOST" translatable="false">bibliogram.art</string>

View File

@ -69,6 +69,13 @@
app:summary="@string/set_use_cache_indication"
app:title="@string/set_use_cache" />
<SwitchPreferenceCompat
app:defaultValue="true"
app:iconSpaceReserved="false"
app:key="@string/SET_CUSTOM_TABS"
app:singleLineTitle="false"
app:title="@string/custom_tabs" />
<SwitchPreferenceCompat
app:defaultValue="false"
app:iconSpaceReserved="false"

View File

@ -1,6 +1,7 @@
Added:
- Camel case tags (automatically recorded when composing)
- Manage tags (add new ones) when composing (main top right menu)
- Support camel case tags (automatically recorded when composing)
- Manage tags when composing (top right menu)
- Custom tabs (default: enabled)
Changed:
- Media heights now use the screen size