mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-11-07 03:07:26 +01:00
Fixed deep link error handling.
This commit is contained in:
parent
f86f06ffe5
commit
8940d4da68
@ -1,14 +1,20 @@
|
|||||||
package ml.docilealligator.infinityforreddit;
|
package ml.docilealligator.infinityforreddit;
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.content.pm.ResolveInfo;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import androidx.browser.customtabs.CustomTabsIntent;
|
import androidx.browser.customtabs.CustomTabsIntent;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static androidx.browser.customtabs.CustomTabsService.ACTION_CUSTOM_TABS_CONNECTION;
|
||||||
|
|
||||||
public class LinkResolverActivity extends AppCompatActivity {
|
public class LinkResolverActivity extends AppCompatActivity {
|
||||||
|
|
||||||
private static final String POST_PATTERN = "/r/\\w+/comments/\\w+/*[\\w+]*/*";
|
private static final String POST_PATTERN = "/r/\\w+/comments/\\w+/*[\\w+]*/*";
|
||||||
@ -58,12 +64,56 @@ public class LinkResolverActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void deepLinkError(Uri uri) {
|
private void deepLinkError(Uri uri) {
|
||||||
//Deep link error handling
|
PackageManager pm = getPackageManager();
|
||||||
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
|
ArrayList<ResolveInfo> resolveInfos = getCustomTabsPackages(pm);
|
||||||
// add share action to menu list
|
if(!resolveInfos.isEmpty()) {
|
||||||
builder.addDefaultShareMenuItem();
|
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
|
||||||
builder.setToolbarColor(getResources().getColor(R.color.colorPrimary));
|
// add share action to menu list
|
||||||
CustomTabsIntent customTabsIntent = builder.build();
|
builder.addDefaultShareMenuItem();
|
||||||
customTabsIntent.launchUrl(this, uri);
|
builder.setToolbarColor(getResources().getColor(R.color.colorPrimary));
|
||||||
|
CustomTabsIntent customTabsIntent = builder.build();
|
||||||
|
customTabsIntent.intent.setPackage(resolveInfos.get(0).activityInfo.packageName);
|
||||||
|
customTabsIntent.launchUrl(this, uri);
|
||||||
|
} else {
|
||||||
|
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||||
|
intent.setData(uri);
|
||||||
|
|
||||||
|
List<ResolveInfo> activities = pm.queryIntentActivities(intent, 0);
|
||||||
|
ArrayList<String> packageNames = new ArrayList<>();
|
||||||
|
|
||||||
|
String currentPackageName = getApplicationContext().getPackageName();
|
||||||
|
|
||||||
|
for(ResolveInfo info : activities) {
|
||||||
|
if(!info.activityInfo.packageName.equals(currentPackageName)) {
|
||||||
|
packageNames.add(info.activityInfo.packageName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!packageNames.isEmpty()) {
|
||||||
|
intent.setPackage(packageNames.get(0));
|
||||||
|
startActivity(intent);
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this, R.string.no_browser_found, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private ArrayList<ResolveInfo> getCustomTabsPackages(PackageManager pm) {
|
||||||
|
// Get default VIEW intent handler.
|
||||||
|
Intent activityIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.example.com"));
|
||||||
|
|
||||||
|
// Get all apps that can handle VIEW intents.
|
||||||
|
List<ResolveInfo> resolvedActivityList = pm.queryIntentActivities(activityIntent, 0);
|
||||||
|
ArrayList<ResolveInfo> packagesSupportingCustomTabs = new ArrayList<>();
|
||||||
|
for (ResolveInfo info : resolvedActivityList) {
|
||||||
|
Intent serviceIntent = new Intent();
|
||||||
|
serviceIntent.setAction(ACTION_CUSTOM_TABS_CONNECTION);
|
||||||
|
serviceIntent.setPackage(info.activityInfo.packageName);
|
||||||
|
// Check if this package also resolves the Custom Tabs service.
|
||||||
|
if (pm.resolveService(serviceIntent, 0) != null) {
|
||||||
|
packagesSupportingCustomTabs.add(info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return packagesSupportingCustomTabs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package ml.docilealligator.infinityforreddit;
|
|||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.net.Uri;
|
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
@ -14,7 +13,6 @@ import android.widget.TextView;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.browser.customtabs.CustomTabsIntent;
|
|
||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
@ -31,8 +29,6 @@ import com.google.android.material.chip.Chip;
|
|||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import com.google.android.material.tabs.TabLayout;
|
import com.google.android.material.tabs.TabLayout;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
|
|
||||||
@ -75,7 +71,6 @@ public class ViewUserDetailActivity extends AppCompatActivity {
|
|||||||
private AppBarLayout.LayoutParams params;
|
private AppBarLayout.LayoutParams params;
|
||||||
|
|
||||||
private String userName;
|
private String userName;
|
||||||
private Uri userUri;
|
|
||||||
private boolean subscriptionReady = false;
|
private boolean subscriptionReady = false;
|
||||||
private boolean isInLazyMode = false;
|
private boolean isInLazyMode = false;
|
||||||
private int colorPrimary;
|
private int colorPrimary;
|
||||||
@ -111,26 +106,7 @@ public class ViewUserDetailActivity extends AppCompatActivity {
|
|||||||
statusBarHeight = getResources().getDimensionPixelSize(resourceId);
|
statusBarHeight = getResources().getDimensionPixelSize(resourceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getIntent().getData() != null) {
|
userName = getIntent().getExtras().getString(EXTRA_USER_NAME_KEY);
|
||||||
userUri = getIntent().getData();
|
|
||||||
List<String> segments = userUri.getPathSegments();
|
|
||||||
int userIndex = segments.indexOf("user");
|
|
||||||
if(userIndex >= 0 && userIndex < segments.size() - 1) {
|
|
||||||
userName = segments.get(userIndex + 1);
|
|
||||||
} else {
|
|
||||||
//Deep link error handling
|
|
||||||
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
|
|
||||||
builder.addDefaultShareMenuItem();
|
|
||||||
builder.setToolbarColor(getResources().getColor(R.color.colorPrimary));
|
|
||||||
CustomTabsIntent customTabsIntent = builder.build();
|
|
||||||
customTabsIntent.launchUrl(this, userUri);
|
|
||||||
finish();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
userName = getIntent().getExtras().getString(EXTRA_USER_NAME_KEY);
|
|
||||||
}
|
|
||||||
|
|
||||||
String title = "u/" + userName;
|
String title = "u/" + userName;
|
||||||
userNameTextView.setText(title);
|
userNameTextView.setText(title);
|
||||||
|
|
||||||
|
@ -146,4 +146,7 @@
|
|||||||
<string name="sort_relevance">Relevance</string>
|
<string name="sort_relevance">Relevance</string>
|
||||||
<string name="sort_comments">Comments</string>
|
<string name="sort_comments">Comments</string>
|
||||||
<string name="sort_activity">Activity</string>
|
<string name="sort_activity">Activity</string>
|
||||||
|
|
||||||
|
<string name="open_link_with">Open link with</string>
|
||||||
|
<string name="no_browser_found">No browser found</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user