Add initial deep link support

pull/40/head
Fox2Code 2 years ago
parent 1bbb16908a
commit ceee285db9

@ -10,8 +10,8 @@ android {
applicationId "com.fox2code.mmm"
minSdk 21
targetSdk 32
versionCode 20
versionName "0.2.9"
versionCode 21
versionName "3.0.0-dev1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

@ -55,6 +55,28 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".deeplink.DeepLinkActivity"
android:exported="true"
android:label="@string/app_name_short"
android:permission="android.permission.INTERNET">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="mmm.fox2code.com"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="${applicationId}"
android:scheme="app" />
</intent-filter>
</activity>
<activity
android:name=".installer.InstallerActivity"
android:parentActivityName=".MainActivity"

@ -13,8 +13,6 @@ import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.fox2code.mmm.compat.CompatActivity;
import com.fox2code.mmm.installer.InstallerInitializer;

@ -231,6 +231,11 @@ public class CompatActivity extends AppCompatActivity {
return super.onCreateOptionsMenu(menu);
}
public void startActivityForResult(Intent intent,
OnActivityResultCallback onActivityResultCallback) {
this.startActivityForResult(intent, null, onActivityResultCallback);
}
@SuppressWarnings("deprecation")
public void startActivityForResult(Intent intent, @Nullable Bundle options,
OnActivityResultCallback onActivityResultCallback) {

@ -0,0 +1,53 @@
package com.fox2code.mmm.deeplink;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import androidx.annotation.Nullable;
import com.fox2code.mmm.BuildConfig;
import com.fox2code.mmm.MainActivity;
import com.fox2code.mmm.compat.CompatActivity;
import com.fox2code.mmm.settings.SettingsActivity;
/**
* Note: Code must be under high security standard, as any website can do a request to this
*/
public class DeepLinkActivity extends CompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = this.getIntent();
if (intent == null) {
this.forceBackPressed();
return;
}
Uri uri = intent.getData();
String path;
if (uri == null || (path = uri.getPath()) == null || uri.getHost() == null ||
!uri.getHost().equals("https".equals(uri.getScheme()) ?
"mmm.fox2code.com" : BuildConfig.APPLICATION_ID)) {
this.forceBackPressed();
return;
}
while (path.startsWith("/"))
path = path.substring(1);
if (path.isEmpty() || path.equals("home")) {
this.startActivity(MainActivity.class);
return;
}
if (path.equals("settings")) {
this.startActivity(SettingsActivity.class);
return;
}
this.forceBackPressed();
}
private void startActivity(Class<? extends Activity> activity) {
this.startActivityForResult(new Intent(this, activity).addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK),
(resultCode, data) -> this.forceBackPressed());
}
}
Loading…
Cancel
Save