Support scribe.rip #63

This commit is contained in:
Thomas 2021-10-25 14:50:06 +02:00
parent 2c82b71b56
commit f931e157e1
7 changed files with 279 additions and 3 deletions

View File

@ -179,7 +179,27 @@
<data android:mimeType="text/plain" />
</intent-filter>
<!-- MEDIUM URLs -->
<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="medium.com" />
<data android:pathPattern="/@.*" />
<data android:scheme="https" />
<data android:scheme="http" />
</intent-filter>
<!-- MEDIUM SHARING HANDLE -->
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:host="medium.com" />
<data android:pathPattern="/@.*" />
<data android:mimeType="text/plain" />
</intent-filter>
<!-- MAPS URLs -->
<!-- /maps/ -->
<intent-filter>

View File

@ -93,6 +93,27 @@
<data android:scheme="http" />
</intent-filter>
<!-- MEDIUM URLs -->
<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="medium.com" />
<data android:pathPattern="/@.*" />
<data android:scheme="https" />
<data android:scheme="http" />
</intent-filter>
<!-- MEDIUM SHARING HANDLE -->
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:host="medium.com" />
<data android:pathPattern="/@.*" />
<data android:mimeType="text/plain" />
</intent-filter>
<!-- SHARING HANDLE -->
<intent-filter>
<action android:name="android.intent.action.SEND" />

View File

@ -70,7 +70,10 @@ public class CheckAppActivity extends AppCompatActivity {
"i.redd.it",
"preview.redd.it"
};
public static String[] medium_domains = {
"medium.com",
"www.medium.com"
};
public static String[] shortener_domains = {
"t.co",
"nyti.ms",

View File

@ -50,6 +50,7 @@ public class MainActivity extends AppCompatActivity {
public static final String SET_TEDDIT_HOST = "set_teddit_host";
public static final String SET_OSM_HOST = "set_osm_host";
public static final String SET_BIBLIOGRAM_HOST = "set_bibliogram_host";
public static final String SET_SCRIBERIP_HOST = "set_scriberip_host";
@SuppressWarnings({"unused", "RedundantSuppression"})
public static String TAG = "UntrackMe";
public static String DEFAULT_NITTER_HOST = "nitter.net";
@ -57,10 +58,12 @@ public class MainActivity extends AppCompatActivity {
public static String SET_INVIDIOUS_ENABLED = "set_invidious_enabled";
public static String SET_TEDDIT_ENABLED = "set_teddit_enabled";
public static String SET_NITTER_ENABLED = "set_nitter_enabled";
public static String SET_SCRIBERIP_ENABLED = "set_scriberip_enabled";
public static String SET_OSM_ENABLED = "set_osm_enabled";
public static String DEFAULT_OSM_HOST = "www.openstreetmap.org";
public static String SET_BIBLIOGRAM_ENABLED = "set_bibliogram_enabled";
public static String DEFAULT_BIBLIOGRAM_HOST = "bibliogram.art";
public static String DEFAULT_SCRIBERIP_HOST = "scribe.rip";
public static String DEFAULT_TEDDIT_HOST = "teddit.net";
public static String SET_GEO_URIS = "set_geo_uris";
public static String SET_EMBEDDED_PLAYER = "set_embedded_player";
@ -79,6 +82,7 @@ public class MainActivity extends AppCompatActivity {
private String invidiousHost;
private String bibliogramHost;
private String tedditHost;
private String scriberipHost;
private String osmHost;
private ContentMainBinding binding;
@ -101,6 +105,7 @@ public class MainActivity extends AppCompatActivity {
boolean osm_enabled = sharedpreferences.getBoolean(SET_OSM_ENABLED, true);
boolean bibliogram_enabled = sharedpreferences.getBoolean(SET_BIBLIOGRAM_ENABLED, true);
boolean teddit_enabled = sharedpreferences.getBoolean(SET_TEDDIT_ENABLED, true);
boolean scriberip_enabled = sharedpreferences.getBoolean(SET_SCRIBERIP_ENABLED, true);
boolean geouri_enabled = sharedpreferences.getBoolean(SET_GEO_URIS, false);
boolean embedded_player = sharedpreferences.getBoolean(SET_EMBEDDED_PLAYER, false);
@ -108,19 +113,23 @@ public class MainActivity extends AppCompatActivity {
binding.enableInvidious.setChecked(invidious_enabled);
binding.enableBibliogram.setChecked(bibliogram_enabled);
binding.enableTeddit.setChecked(teddit_enabled);
binding.enableScriberip.setChecked(scriberip_enabled);
binding.enableOsm.setChecked(osm_enabled);
nitterHost = sharedpreferences.getString(SET_NITTER_HOST, null);
invidiousHost = sharedpreferences.getString(SET_INVIDIOUS_HOST, null);
bibliogramHost = sharedpreferences.getString(SET_BIBLIOGRAM_HOST, null);
tedditHost = sharedpreferences.getString(SET_TEDDIT_HOST, null);
scriberipHost = sharedpreferences.getString(SET_SCRIBERIP_HOST, null);
osmHost = sharedpreferences.getString(SET_OSM_HOST, null);
binding.groupCurrentInvidious.setVisibility(invidious_enabled ? View.VISIBLE : View.GONE);
binding.groupCurrentNitter.setVisibility(nitter_enabled ? View.VISIBLE : View.GONE);
binding.groupCurrentBibliogram.setVisibility(bibliogram_enabled ? View.VISIBLE : View.GONE);
binding.groupCurrentTeddit.setVisibility(bibliogram_enabled ? View.VISIBLE : View.GONE);
binding.groupCurrentScriberip.setVisibility(scriberip_enabled ? View.VISIBLE : View.GONE);
binding.groupCurrentOsm.setVisibility((osm_enabled && geouri_enabled) ? View.VISIBLE : View.GONE);
binding.enableGeoUris.setVisibility(osm_enabled ? View.VISIBLE : View.GONE);
binding.enableEmbedPlayer.setVisibility(invidious_enabled ? View.VISIBLE : View.GONE);
@ -158,6 +167,14 @@ public class MainActivity extends AppCompatActivity {
binding.groupCustomTeddit.setVisibility(View.GONE);
binding.buttonExpandInstanceTeddit.setRotation(0);
});
binding.enableScriberip.setOnCheckedChangeListener((buttonView, isChecked) -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(SET_SCRIBERIP_ENABLED, isChecked);
editor.apply();
binding.groupCurrentScriberip.setVisibility(isChecked ? View.VISIBLE : View.GONE);
binding.groupCustomScriberip.setVisibility(View.GONE);
binding.buttonExpandInstanceScriberip.setRotation(0);
});
binding.enableOsm.setOnCheckedChangeListener((buttonView, isChecked) -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(SET_OSM_ENABLED, isChecked);
@ -243,6 +260,22 @@ public class MainActivity extends AppCompatActivity {
binding.tedditInstance.setText("");
}
});
binding.buttonExpandInstanceScriberip.setOnClickListener(v -> {
boolean custom_instance_visibility = binding.groupCustomScriberip.getVisibility() == View.VISIBLE;
if (custom_instance_visibility) {
binding.buttonExpandInstanceScriberip.setRotation(0f);
binding.groupCustomScriberip.setVisibility(View.GONE);
} else {
binding.buttonExpandInstanceScriberip.setRotation(180f);
binding.groupCustomScriberip.setVisibility(View.VISIBLE);
}
if (scriberipHost != null) {
binding.scriberipInstance.setText(scriberipHost);
} else {
binding.scriberipInstance.setText("");
}
});
binding.buttonExpandInstanceOsm.setOnClickListener(v -> {
boolean custom_instance_visibility = binding.groupCustomOsm.getVisibility() == View.VISIBLE;
if (custom_instance_visibility) {
@ -285,6 +318,12 @@ public class MainActivity extends AppCompatActivity {
} else {
binding.currentInstanceTeddit.setText(DEFAULT_TEDDIT_HOST);
}
if (scriberipHost != null) {
binding.scriberipInstance.setText(scriberipHost);
binding.currentInstanceScriberip.setText(scriberipHost);
} else {
binding.currentInstanceScriberip.setText(DEFAULT_SCRIBERIP_HOST);
}
if (osmHost != null) {
binding.osmInstance.setText(osmHost);
binding.currentInstanceOsm.setText(osmHost);
@ -350,6 +389,18 @@ public class MainActivity extends AppCompatActivity {
}
editor.apply();
});
binding.buttonSaveInstanceScriberip.setOnClickListener(v -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
if (binding.scriberipInstance.getText() != null && binding.scriberipInstance.getText().toString().trim().length() > 0) {
String custom_instance = binding.scriberipInstance.getText().toString().toLowerCase().trim();
editor.putString(SET_SCRIBERIP_HOST, custom_instance);
binding.currentInstanceScriberip.setText(custom_instance);
} else {
editor.putString(SET_SCRIBERIP_HOST, null);
binding.currentInstanceScriberip.setText(DEFAULT_SCRIBERIP_HOST);
}
editor.apply();
});
binding.buttonSaveInstanceOsm.setOnClickListener(v -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
if (binding.osmInstance.getText() != null && binding.osmInstance.getText().toString().trim().length() > 0) {
@ -439,6 +490,15 @@ public class MainActivity extends AppCompatActivity {
binding.currentInstanceTeddit.setText(DEFAULT_TEDDIT_HOST);
binding.buttonExpandInstanceTeddit.setRotation(0f);
break;
case SET_SCRIBERIP_HOST:
scriberipHost = sharedpreferences.getString(SET_SCRIBERIP_HOST, null);
binding.groupCustomScriberip.setVisibility(View.GONE);
if (scriberipHost != null && scriberipHost.trim().length() > 0)
binding.currentInstanceScriberip.setText(scriberipHost);
else
binding.currentInstanceScriberip.setText(DEFAULT_SCRIBERIP_HOST);
binding.buttonExpandInstanceScriberip.setRotation(0f);
break;
case SET_OSM_HOST:
osmHost = sharedpreferences.getString(SET_OSM_HOST, null);
binding.groupCustomOsm.setVisibility(View.GONE);
@ -512,6 +572,7 @@ public class MainActivity extends AppCompatActivity {
String invidiousHost = sharedpreferences.getString(SET_INVIDIOUS_HOST, null);
String bibliogramHost = sharedpreferences.getString(SET_BIBLIOGRAM_HOST, null);
String tedditHost = sharedpreferences.getString(SET_TEDDIT_HOST, null);
String scriberipHost = sharedpreferences.getString(SET_SCRIBERIP_HOST, null);
if (nitterHost != null) {
binding.nitterInstance.setText(nitterHost);
binding.currentInstanceNitter.setText(nitterHost);
@ -528,6 +589,10 @@ public class MainActivity extends AppCompatActivity {
binding.tedditInstance.setText(tedditHost);
binding.currentInstanceTeddit.setText(tedditHost);
}
if (scriberipHost != null) {
binding.scriberipInstance.setText(scriberipHost);
binding.currentInstanceScriberip.setText(scriberipHost);
}
if (BuildConfig.fullLinks) {
List<ResolveInfo> resolveInfos = getPackageManager().queryIntentActivities(new Intent(Intent.ACTION_VIEW, Uri.parse("https://fedilab.app")), PackageManager.MATCH_DEFAULT_ONLY);
String thisPackageName = getApplicationContext().getPackageName();

View File

@ -82,6 +82,7 @@ import static android.content.Context.DOWNLOAD_SERVICE;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.bibliogram_instances;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.instagram_domains;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.invidious_instances;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.medium_domains;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.nitter_instances;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.outlook_safe_domain;
import static app.fedilab.nitterizeme.activities.CheckAppActivity.reddit_domains;
@ -92,6 +93,7 @@ import static app.fedilab.nitterizeme.activities.MainActivity.SET_BIBLIOGRAM_ENA
import static app.fedilab.nitterizeme.activities.MainActivity.SET_EMBEDDED_PLAYER;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_INVIDIOUS_ENABLED;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_NITTER_ENABLED;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_SCRIBERIP_ENABLED;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_TEDDIT_ENABLED;
import static app.fedilab.nitterizeme.activities.MainActivity.SET_TEDDIT_HOST;
@ -105,6 +107,7 @@ public class Utils {
public static final Pattern redditPattern = Pattern.compile("(www\\.|m\\.)?(reddit\\.com|preview\\.redd\\.it|i\\.redd\\.it)/(((?!([\"'<])).)*)");
public static final Pattern nitterPattern = Pattern.compile("(mobile\\.|www\\.)?twitter.com([\\w-/]+)");
public static final Pattern bibliogramPostPattern = Pattern.compile("(m\\.|www\\.)?instagram.com(/p/[\\w-/]+)");
public static final Pattern scriberipPattern = Pattern.compile("(www\\.)?medium.com/([\\w-/@]+)");
public static final Pattern bibliogramAccountPattern = Pattern.compile("(m\\.|www\\.)?instagram.com(((?!/p/).)+)");
public static final Pattern maps = Pattern.compile("/maps/place/([^@]+@)?([\\d.,z]+).*");
@ -307,6 +310,24 @@ public class Utils {
} else {
return url;
}
} else if (Arrays.asList(medium_domains).contains(host)) {
boolean scriberip_enabled = sharedpreferences.getBoolean(MainActivity.SET_SCRIBERIP_ENABLED, true);
if (scriberip_enabled) {
String scriberipHost = sharedpreferences.getString(MainActivity.SET_SCRIBERIP_HOST, MainActivity.DEFAULT_SCRIBERIP_HOST);
assert scriberipHost != null;
scriberipHost = scriberipHost.toLowerCase();
if (scriberipHost.startsWith("http")) {
scheme = "";
}
Matcher matcher = scriberipPattern.matcher(url);
while (matcher.find()) {
final String scriberip_directory = matcher.group(2);
newUrl = scheme + scriberipHost + "/" + scriberip_directory;
}
return newUrl;
} else {
return url;
}
} else if (url.contains("/maps/place")) {
boolean osm_enabled = sharedpreferences.getBoolean(MainActivity.SET_OSM_ENABLED, true);
if (osm_enabled) {
@ -1197,7 +1218,7 @@ public class Utils {
return Arrays.asList(twitter_domains).contains(host) || Arrays.asList(nitter_instances).contains(host) || Arrays.asList(reddit_domains).contains(host)
|| Arrays.asList(instagram_domains).contains(host) || Arrays.asList(bibliogram_instances).contains(host)
|| url.contains("/maps/place") || url.contains("/amp/s/") || (host != null && host.contains(outlook_safe_domain))
|| Arrays.asList(youtube_domains).contains(host) || Arrays.asList(invidious_instances).contains(host);
|| Arrays.asList(youtube_domains).contains(host) || Arrays.asList(invidious_instances).contains(host) || Arrays.asList(medium_domains).contains(host);
}
public static boolean routerEnabledForHost(Context context, String url) {
@ -1221,6 +1242,8 @@ public class Utils {
return sharedpreferences.getBoolean(SET_INVIDIOUS_ENABLED, true);
} else if (Arrays.asList(reddit_domains).contains(host)) {
return sharedpreferences.getBoolean(SET_TEDDIT_ENABLED, true);
} else if (Arrays.asList(medium_domains).contains(host)) {
return sharedpreferences.getBoolean(SET_SCRIBERIP_ENABLED, true);
} else
return url.contains("/amp/s/") || (host != null && host.contains(outlook_safe_domain));
}

View File

@ -489,7 +489,7 @@
style="@style/containerCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/osm_container"
app:layout_constraintBottom_toTopOf="@id/scriberip_container"
app:layout_constraintTop_toBottomOf="@id/bibliogram_container">
<androidx.constraintlayout.widget.ConstraintLayout
@ -626,6 +626,148 @@
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id="@+id/scriberip_container"
style="@style/containerCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/osm_container"
app:layout_constraintTop_toBottomOf="@id/teddit_container">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_scriberip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="40dp" />
<View
android:id="@+id/top_part_bg_scriberip"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/topBar"
app:layout_constraintBottom_toBottomOf="@id/guide_scriberip"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/scriberip_indications"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:text="@string/redirect_medium_to_scriberip"
app:layout_constraintBottom_toBottomOf="@id/guide_scriberip"
app:layout_constraintEnd_toStartOf="@id/enable_scriberip"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/enable_scriberip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
app:layout_constraintBottom_toBottomOf="@id/guide_scriberip"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageButton
android:id="@+id/button_expand_instance_scriberip"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@null"
android:contentDescription="@string/expand_instance_details"
android:scaleType="fitCenter"
android:src="@drawable/ic_expand_more"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/guide_scriberip" />
<TextView
android:id="@+id/label_instance_scriberip"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginStart="@dimen/label_instance_margin_start"
android:layout_marginLeft="@dimen/label_instance_margin_start"
android:gravity="center_vertical"
android:text="@string/instance_label"
app:layout_constraintStart_toEndOf="@id/button_expand_instance_scriberip"
app:layout_constraintTop_toTopOf="@id/guide_scriberip" />
<TextView
android:id="@+id/current_instance_scriberip"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_marginStart="5dp"
android:layout_marginLeft="5dp"
android:gravity="center_vertical"
android:textColor="#fff"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/label_instance_scriberip"
app:layout_constraintTop_toTopOf="@id/guide_scriberip" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier_scriberip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="label_instance_scriberip,current_instance_scriberip,button_expand_instance_scriberip" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/scriberip_instance_container"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/button_save_instance_scriberip"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/barrier_scriberip">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/scriberip_instance"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/custom_scriberip"
android:inputType="textUri"
android:maxLines="1"
android:textSize="@dimen/custom_instance_input_text_size" />
</com.google.android.material.textfield.TextInputLayout>
<ImageButton
android:id="@+id/button_save_instance_scriberip"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_margin="5dp"
android:background="@null"
android:contentDescription="@string/save"
android:src="@drawable/ic_save"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/barrier_scriberip" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group_current_scriberip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="label_instance_scriberip,current_instance_scriberip,button_expand_instance_scriberip" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group_custom_scriberip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:constraint_referenced_ids="scriberip_instance_container,button_save_instance_scriberip" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id="@+id/osm_container"
style="@style/containerCard"

View File

@ -46,7 +46,9 @@
<string name="redirect_twitter_to_nitter">Redirect Twitter to Nitter</string>
<string name="redirect_instagram_to_bibliogram">Redirect Instagram to Bibliogram</string>
<string name="redirect_reddit_to_teddit">Redirect Reddit to Teddit</string>
<string name="redirect_medium_to_scriberip">Redirect Medium to Scribe.rip</string>
<string name="custom_bibliogram">Custom Bibliogram instance</string>
<string name="custom_scriberip">Custom Scribe.rip instance</string>
<string name="custom_teddit">Custom Teddit instance</string>
<string name="redirect_gm_to_geo_uri">Redirect Google Map to Geo URI</string>
<string name="configure">Configure</string>