Use README.md in details for repo

This commit is contained in:
topjohnwu 2017-02-16 05:45:31 +08:00
parent d1c939f48a
commit a03bb90754
25 changed files with 147 additions and 347 deletions

View File

@ -54,6 +54,7 @@ dependencies {
compile 'com.jakewharton:butterknife:8.5.1' compile 'com.jakewharton:butterknife:8.5.1'
compile 'com.github.clans:fab:1.6.4' compile 'com.github.clans:fab:1.6.4'
compile 'com.thoughtbot:expandablerecyclerview:1.4' compile 'com.thoughtbot:expandablerecyclerview:1.4'
compile 'us.feras.mdv:markdownview:1.1.0'
compile 'com.madgag.spongycastle:core:1.54.0.0' compile 'com.madgag.spongycastle:core:1.54.0.0'
compile 'com.madgag.spongycastle:prov:1.54.0.0' compile 'com.madgag.spongycastle:prov:1.54.0.0'
compile 'com.madgag.spongycastle:pkix:1.54.0.0' compile 'com.madgag.spongycastle:pkix:1.54.0.0'

View File

@ -87,7 +87,7 @@ public class InstallFragment extends Fragment implements CallbackEvent.Listener<
}, },
getApplication().magiskLink, getApplication().magiskLink,
Utils.getLegalFilename(filename))) Utils.getLegalFilename(filename)))
.setNeutralButton(R.string.check_release_notes, (dialog, which) -> { .setNeutralButton(R.string.release_notes, (dialog, which) -> {
getActivity().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getApplication().releaseNoteLink))); getActivity().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getApplication().releaseNoteLink)));
}) })
.setNegativeButton(R.string.no_thanks, null) .setNegativeButton(R.string.no_thanks, null)

View File

@ -242,7 +242,7 @@ public class StatusFragment extends Fragment implements CallbackEvent.Listener<V
transaction.replace(R.id.content_frame, new InstallFragment(), "install").commit(); transaction.replace(R.id.content_frame, new InstallFragment(), "install").commit();
} catch (IllegalStateException ignored) {} } catch (IllegalStateException ignored) {}
}) })
.setNeutralButton(R.string.check_release_notes, (dialog, which) -> { .setNeutralButton(R.string.release_notes, (dialog, which) -> {
getActivity().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getApplication().releaseNoteLink))); getActivity().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getApplication().releaseNoteLink)));
}) })
.setNegativeButton(R.string.no_thanks, null) .setNegativeButton(R.string.no_thanks, null)

View File

@ -1,17 +1,12 @@
package com.topjohnwu.magisk.adapters; package com.topjohnwu.magisk.adapters;
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
@ -19,14 +14,12 @@ import android.widget.TextView;
import com.topjohnwu.magisk.R; import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.asyncs.ProcessRepoZip; import com.topjohnwu.magisk.asyncs.ProcessRepoZip;
import com.topjohnwu.magisk.components.AlertDialogBuilder; import com.topjohnwu.magisk.components.AlertDialogBuilder;
import com.topjohnwu.magisk.components.MarkDownWindow;
import com.topjohnwu.magisk.module.Repo; import com.topjohnwu.magisk.module.Repo;
import com.topjohnwu.magisk.receivers.DownloadReceiver; import com.topjohnwu.magisk.receivers.DownloadReceiver;
import com.topjohnwu.magisk.utils.Utils; import com.topjohnwu.magisk.utils.Utils;
import com.topjohnwu.magisk.utils.WebWindow;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
@ -34,7 +27,7 @@ import butterknife.ButterKnife;
public class ReposAdapter extends RecyclerView.Adapter<ReposAdapter.ViewHolder> { public class ReposAdapter extends RecyclerView.Adapter<ReposAdapter.ViewHolder> {
private List<Repo> mUpdateRepos, mInstalledRepos, mOthersRepos; private List<Repo> mUpdateRepos, mInstalledRepos, mOthersRepos;
private Set<Repo> expandList = new HashSet<>(); private Context mContext;
public ReposAdapter(List<Repo> update, List<Repo> installed, List<Repo> others) { public ReposAdapter(List<Repo> update, List<Repo> installed, List<Repo> others) {
mUpdateRepos = update; mUpdateRepos = update;
@ -44,45 +37,31 @@ public class ReposAdapter extends RecyclerView.Adapter<ReposAdapter.ViewHolder>
@Override @Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_repo, parent, false); mContext = parent.getContext();
View v = LayoutInflater.from(mContext).inflate(R.layout.list_item_repo, parent, false);
return new ViewHolder(v); return new ViewHolder(v);
} }
@Override @Override
public void onBindViewHolder(final ViewHolder holder, int position) { public void onBindViewHolder(final ViewHolder holder, int position) {
Context context = holder.itemView.getContext();
Repo repo = getItem(position); Repo repo = getItem(position);
holder.title.setText(repo.getName()); holder.title.setText(repo.getName());
holder.versionName.setText(repo.getVersion()); holder.versionName.setText(repo.getVersion());
String author = repo.getAuthor(); String author = repo.getAuthor();
holder.author.setText(TextUtils.isEmpty(author) ? null : context.getString(R.string.author, author)); holder.author.setText(TextUtils.isEmpty(author) ? null : mContext.getString(R.string.author, author));
holder.description.setText(repo.getDescription()); holder.description.setText(repo.getDescription());
holder.setExpanded(expandList.contains(repo)); holder.infoLayout.setOnClickListener(v -> new MarkDownWindow(null, repo.getDetailUrl(), mContext));
holder.itemView.setOnClickListener(view -> { holder.downloadImage.setOnClickListener(v -> {
if (holder.mExpanded) {
holder.collapse();
expandList.remove(repo);
} else {
holder.expand();
expandList.add(repo);
}
});
holder.changeLog.setOnClickListener(view -> {
if (!TextUtils.isEmpty(repo.getLogUrl())) {
new WebWindow(context.getString(R.string.changelog), repo.getLogUrl(), context);
}
});
holder.updateImage.setOnClickListener(view -> {
String filename = repo.getName() + "-" + repo.getVersion() + ".zip"; String filename = repo.getName() + "-" + repo.getVersion() + ".zip";
new AlertDialogBuilder(context) new AlertDialogBuilder(mContext)
.setTitle(context.getString(R.string.repo_install_title, repo.getName())) .setTitle(mContext.getString(R.string.repo_install_title, repo.getName()))
.setMessage(context.getString(R.string.repo_install_msg, filename)) .setMessage(mContext.getString(R.string.repo_install_msg, filename))
.setCancelable(true) .setCancelable(true)
.setPositiveButton(R.string.download_install, (dialogInterface, i) -> Utils.dlAndReceive( .setPositiveButton(R.string.download_install, (dialogInterface, i) -> Utils.dlAndReceive(
context, mContext,
new DownloadReceiver() { new DownloadReceiver() {
@Override @Override
public void onDownloadDone(Uri uri) { public void onDownloadDone(Uri uri) {
@ -94,16 +73,6 @@ public class ReposAdapter extends RecyclerView.Adapter<ReposAdapter.ViewHolder>
.setNegativeButton(R.string.no_thanks, null) .setNegativeButton(R.string.no_thanks, null)
.show(); .show();
}); });
holder.authorLink.setOnClickListener(view -> {
if (!TextUtils.isEmpty(repo.getDonateUrl())) {
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(repo.getDonateUrl())));
}
});
holder.supportLink.setOnClickListener(view -> {
if (!TextUtils.isEmpty(repo.getSupportUrl())) {
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(repo.getSupportUrl())));
}
});
} }
@Override @Override
@ -131,97 +100,12 @@ public class ReposAdapter extends RecyclerView.Adapter<ReposAdapter.ViewHolder>
@BindView(R.id.version_name) TextView versionName; @BindView(R.id.version_name) TextView versionName;
@BindView(R.id.description) TextView description; @BindView(R.id.description) TextView description;
@BindView(R.id.author) TextView author; @BindView(R.id.author) TextView author;
@BindView(R.id.expand_layout) LinearLayout expandLayout; @BindView(R.id.info_layout) LinearLayout infoLayout;
@BindView(R.id.update) ImageView updateImage; @BindView(R.id.download) ImageView downloadImage;
@BindView(R.id.changeLog) ImageView changeLog;
@BindView(R.id.authorLink) ImageView authorLink;
@BindView(R.id.supportLink) ImageView supportLink;
private ValueAnimator mAnimator;
private ObjectAnimator animY2;
private boolean mExpanded = false;
private static int expandHeight = 0;
ViewHolder(View itemView) { ViewHolder(View itemView) {
super(itemView); super(itemView);
ButterKnife.bind(this, itemView); ButterKnife.bind(this, itemView);
expandLayout.getViewTreeObserver().addOnPreDrawListener(
new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
if (expandHeight == 0) {
final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
final int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
expandLayout.measure(widthSpec, heightSpec);
expandHeight = expandLayout.getMeasuredHeight();
}
expandLayout.getViewTreeObserver().removeOnPreDrawListener(this);
expandLayout.setVisibility(View.GONE);
mAnimator = slideAnimator(0, expandHeight);
animY2 = ObjectAnimator.ofFloat(updateImage, "translationY", expandHeight / 2);
return true;
}
});
}
private void setExpanded(boolean expanded) {
mExpanded = expanded;
ViewGroup.LayoutParams layoutParams = expandLayout.getLayoutParams();
layoutParams.height = expanded ? expandHeight : 0;
expandLayout.setLayoutParams(layoutParams);
expandLayout.setVisibility(expanded ? View.VISIBLE : View.GONE);
if (expanded) {
updateImage.setTranslationY(expandHeight / 2);
} else {
updateImage.setTranslationY(0);
}
}
private void expand() {
expandLayout.setVisibility(View.VISIBLE);
mAnimator.start();
animY2.start();
mExpanded = true;
}
private void collapse() {
if (!mExpanded) return;
int finalHeight = expandLayout.getHeight();
ValueAnimator mAnimator = slideAnimator(finalHeight, 0);
mAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationEnd(Animator animator) {
expandLayout.setVisibility(View.GONE);
}
@Override
public void onAnimationStart(Animator animator) {}
@Override
public void onAnimationCancel(Animator animator) {}
@Override
public void onAnimationRepeat(Animator animator) {}
});
mAnimator.start();
animY2.reverse();
mExpanded = false;
}
private ValueAnimator slideAnimator(int start, int end) {
ValueAnimator animator = ValueAnimator.ofInt(start, end);
animator.addUpdateListener(valueAnimator -> {
int value = (Integer) valueAnimator.getAnimatedValue();
ViewGroup.LayoutParams layoutParams = expandLayout.getLayoutParams();
layoutParams.height = value;
expandLayout.setLayoutParams(layoutParams);
});
return animator;
} }
} }

View File

@ -6,7 +6,6 @@ import android.net.Uri;
import android.widget.Toast; import android.widget.Toast;
import com.topjohnwu.magisk.R; import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.utils.ByteArrayInOutStream;
import com.topjohnwu.magisk.utils.Logger; import com.topjohnwu.magisk.utils.Logger;
import com.topjohnwu.magisk.utils.Shell; import com.topjohnwu.magisk.utils.Shell;
import com.topjohnwu.magisk.utils.Utils; import com.topjohnwu.magisk.utils.Utils;

View File

@ -9,7 +9,10 @@ import android.support.annotation.StyleRes;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup;
import android.view.ViewStub;
import android.widget.Button; import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import com.topjohnwu.magisk.R; import com.topjohnwu.magisk.R;
@ -19,10 +22,14 @@ import butterknife.ButterKnife;
public class AlertDialogBuilder extends AlertDialog.Builder { public class AlertDialogBuilder extends AlertDialog.Builder {
@BindView(R.id.button_panel) LinearLayout buttons;
@BindView(R.id.message_panel) LinearLayout messagePanel;
@BindView(R.id.negative) Button negative; @BindView(R.id.negative) Button negative;
@BindView(R.id.positive) Button positive; @BindView(R.id.positive) Button positive;
@BindView(R.id.neutral) Button neutral; @BindView(R.id.neutral) Button neutral;
@BindView(R.id.message) TextView messageView; @BindView(R.id.message) TextView messageView;
@BindView(R.id.custom_view) ViewStub custom;
private DialogInterface.OnClickListener positiveListener; private DialogInterface.OnClickListener positiveListener;
private DialogInterface.OnClickListener negativeListener; private DialogInterface.OnClickListener negativeListener;
@ -47,11 +54,30 @@ public class AlertDialogBuilder extends AlertDialog.Builder {
negative.setVisibility(View.GONE); negative.setVisibility(View.GONE);
positive.setVisibility(View.GONE); positive.setVisibility(View.GONE);
neutral.setVisibility(View.GONE); neutral.setVisibility(View.GONE);
buttons.setVisibility(View.GONE);
messagePanel.setVisibility(View.GONE);
}
@Override
public AlertDialog.Builder setView(int layoutResId) {
custom.setLayoutResource(layoutResId);
custom.inflate();
return this;
}
@Override
public AlertDialog.Builder setView(View view) {
ViewGroup parent = (ViewGroup) custom.getParent();
int idx = parent.indexOfChild(custom);
parent.removeView(custom);
parent.addView(view, idx);
return this;
} }
@Override @Override
public AlertDialog.Builder setMessage(@Nullable CharSequence message) { public AlertDialog.Builder setMessage(@Nullable CharSequence message) {
messageView.setText(message); messageView.setText(message);
messagePanel.setVisibility(View.VISIBLE);
return this; return this;
} }
@ -62,6 +88,7 @@ public class AlertDialogBuilder extends AlertDialog.Builder {
@Override @Override
public AlertDialog.Builder setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener) { public AlertDialog.Builder setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener) {
buttons.setVisibility(View.VISIBLE);
positive.setVisibility(View.VISIBLE); positive.setVisibility(View.VISIBLE);
positive.setText(text); positive.setText(text);
positiveListener = listener; positiveListener = listener;
@ -80,6 +107,7 @@ public class AlertDialogBuilder extends AlertDialog.Builder {
@Override @Override
public AlertDialog.Builder setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener) { public AlertDialog.Builder setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener) {
buttons.setVisibility(View.VISIBLE);
negative.setVisibility(View.VISIBLE); negative.setVisibility(View.VISIBLE);
negative.setText(text); negative.setText(text);
negativeListener = listener; negativeListener = listener;
@ -98,6 +126,7 @@ public class AlertDialogBuilder extends AlertDialog.Builder {
@Override @Override
public AlertDialog.Builder setNeutralButton(CharSequence text, DialogInterface.OnClickListener listener) { public AlertDialog.Builder setNeutralButton(CharSequence text, DialogInterface.OnClickListener listener) {
buttons.setVisibility(View.VISIBLE);
neutral.setVisibility(View.VISIBLE); neutral.setVisibility(View.VISIBLE);
neutral.setText(text); neutral.setText(text);
neutralListener = listener; neutralListener = listener;

View File

@ -0,0 +1,27 @@
package com.topjohnwu.magisk.components;
import android.content.Context;
import android.support.v7.app.AlertDialog;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.utils.Logger;
import us.feras.mdv.MarkdownView;
public class MarkDownWindow {
public MarkDownWindow(String title, String url, Context context) {
AlertDialog.Builder alert = new AlertDialogBuilder(context);
alert.setTitle(title);
Logger.dev("WebView: URL = " + url);
MarkdownView md = new MarkdownView(context);
md.loadMarkdownFile(url);
alert.setView(md);
alert.setNegativeButton(R.string.close, (dialog, id) -> dialog.dismiss());
alert.show();
}
}

View File

@ -9,8 +9,7 @@ import java.util.List;
public abstract class BaseModule implements Comparable<BaseModule> { public abstract class BaseModule implements Comparable<BaseModule> {
protected String mId, mName, mVersion, mAuthor, mDescription, mSupportUrl, mDonateUrl; protected String mId, mName, mVersion, mAuthor, mDescription;
protected boolean mIsCacheModule = false;
protected int mVersionCode = 0; protected int mVersionCode = 0;
protected void parseProps(List<String> props) throws CacheModException { parseProps(props.toArray(new String[props.size()])); } protected void parseProps(List<String> props) throws CacheModException { parseProps(props.toArray(new String[props.size()])); }
@ -48,21 +47,14 @@ public abstract class BaseModule implements Comparable<BaseModule> {
case "description": case "description":
this.mDescription = prop[1]; this.mDescription = prop[1];
break; break;
case "support":
this.mSupportUrl = prop[1];
break;
case "donate":
this.mDonateUrl = prop[1];
break;
case "cacheModule": case "cacheModule":
this.mIsCacheModule = Boolean.parseBoolean(prop[1]); if (Boolean.parseBoolean(prop[1]))
throw new CacheModException(mId);
break; break;
default: default:
break; break;
} }
} }
if (mIsCacheModule)
throw new CacheModException(mId);
} }
public String getName() { public String getName() {
@ -77,7 +69,9 @@ public abstract class BaseModule implements Comparable<BaseModule> {
return mAuthor; return mAuthor;
} }
public String getId() {return mId; } public String getId() {
return mId;
}
public String getDescription() { public String getDescription() {
return mDescription; return mDescription;
@ -87,14 +81,6 @@ public abstract class BaseModule implements Comparable<BaseModule> {
return mVersionCode; return mVersionCode;
} }
public String getDonateUrl() {
return mDonateUrl;
}
public String getSupportUrl() {
return mSupportUrl;
}
public static class CacheModException extends Exception { public static class CacheModException extends Exception {
public CacheModException(String id) { public CacheModException(String id) {
Logger.error("Cache mods are no longer supported! id: " + id); Logger.error("Cache mods are no longer supported! id: " + id);

View File

@ -42,8 +42,6 @@ public class Repo extends BaseModule {
public void update(Date lastUpdate) throws CacheModException { public void update(Date lastUpdate) throws CacheModException {
Logger.dev("Repo: Local: " + mLastUpdate + " Remote: " + lastUpdate); Logger.dev("Repo: Local: " + mLastUpdate + " Remote: " + lastUpdate);
if (mIsCacheModule)
throw new CacheModException(mId);
if (lastUpdate.after(mLastUpdate)) { if (lastUpdate.after(mLastUpdate)) {
mLastUpdate = lastUpdate; mLastUpdate = lastUpdate;
update(); update();
@ -75,6 +73,10 @@ public class Repo extends BaseModule {
return String.format(FILE_URL, repoName, "module.prop"); return String.format(FILE_URL, repoName, "module.prop");
} }
public String getDetailUrl() {
return String.format(FILE_URL, repoName, "README.md");
}
public Date getLastUpdate() { public Date getLastUpdate() {
return mLastUpdate; return mLastUpdate;
} }

View File

@ -1,34 +0,0 @@
package com.topjohnwu.magisk.utils;
import android.content.Context;
import android.support.v7.app.AlertDialog;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.topjohnwu.magisk.components.AlertDialogBuilder;
public class WebWindow {
public WebWindow(String title, String url, Context context) {
AlertDialog.Builder alert = new AlertDialogBuilder(context);
alert.setTitle(title);
Logger.dev("WebView: URL = " + url);
WebView wv = new WebView(context);
wv.loadUrl(url);
wv.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(url);
return true;
}
});
alert.setView(wv);
alert.setNegativeButton("Close", (dialog, id) -> dialog.dismiss());
alert.show();
}
}

View File

@ -4,9 +4,7 @@
#include <jni.h> #include <jni.h>
#include <stdlib.h> #include <stdlib.h>
#include <sys/types.h>
#include <unistd.h> #include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#include "zipadjust.h" #include "zipadjust.h"

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#000"
android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z"/>
</vector>

View File

@ -6,6 +6,7 @@
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<LinearLayout <LinearLayout
android:id="@+id/message_panel"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
@ -31,8 +32,14 @@
</LinearLayout> </LinearLayout>
<ViewStub
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/custom_view"/>
<LinearLayout <LinearLayout
style="?android:attr/buttonBarStyle" style="?android:attr/buttonBarStyle"
android:id="@+id/button_panel"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="54dip" android:minHeight="54dip"

View File

@ -14,29 +14,20 @@
card_view:cardCornerRadius="@dimen/card_corner_radius" card_view:cardCornerRadius="@dimen/card_corner_radius"
card_view:cardElevation="@dimen/card_elevation"> card_view:cardElevation="@dimen/card_elevation">
<RelativeLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight" android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="horizontal"
android:padding="@dimen/card_layout_padding"> android:padding="@dimen/card_layout_padding">
<LinearLayout <LinearLayout
android:orientation="vertical" android:id="@+id/info_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:id="@+id/info_layout">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="vertical"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1"> android:layout_weight="1"
android:clickable="true"
android:orientation="vertical">
<TextView <TextView
android:id="@+id/title" android:id="@+id/title"
@ -44,7 +35,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="0dp" android:layout_marginTop="0dp"
android:textAppearance="?android:attr/textAppearanceMedium" android:textAppearance="?android:attr/textAppearanceMedium"
android:textIsSelectable="false"/> android:textIsSelectable="false" />
<TextView <TextView
android:id="@+id/version_name" android:id="@+id/version_name"
@ -54,7 +45,7 @@
android:textAppearance="?android:attr/textAppearanceSmall" android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@android:color/tertiary_text_dark" android:textColor="@android:color/tertiary_text_dark"
android:textIsSelectable="false" android:textIsSelectable="false"
android:textStyle="bold|italic"/> android:textStyle="bold|italic" />
<TextView <TextView
android:id="@+id/author" android:id="@+id/author"
@ -64,7 +55,7 @@
android:textAppearance="?android:attr/textAppearanceSmall" android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@android:color/tertiary_text_dark" android:textColor="@android:color/tertiary_text_dark"
android:textIsSelectable="false" android:textIsSelectable="false"
android:textStyle="bold|italic"/> android:textStyle="bold|italic" />
<TextView <TextView
android:id="@+id/description" android:id="@+id/description"
@ -78,72 +69,18 @@
</LinearLayout> </LinearLayout>
<ImageView <ImageView
android:id="@+id/update" android:id="@+id/download"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:background="@drawable/ic_file_download_black" android:background="@drawable/ic_file_download_black"
android:backgroundTint="@color/icon_grey" android:backgroundTint="@color/icon_grey"
android:clickable="true"
android:focusable="false" android:focusable="false"
android:gravity="end" /> android:gravity="end" />
</LinearLayout> </LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/expand_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_below="@id/info_layout"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal">
<ImageView
android:id="@+id/changeLog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/card_imageview_margin"
android:layout_marginStart="@dimen/card_imageview_margin"
android:background="?android:attr/selectableItemBackground"
android:padding="15dp"
android:src="@drawable/ic_changelog"
android:tint="@color/icon_grey"/>
<ImageView
android:id="@+id/authorLink"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/card_imageview_margin"
android:layout_marginStart="@dimen/card_imageview_margin"
android:background="?android:attr/selectableItemBackground"
android:padding="15dp"
android:src="@drawable/ic_person"
android:tint="@color/icon_grey"/>
<ImageView
android:id="@+id/supportLink"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/card_imageview_margin"
android:layout_marginStart="@dimen/card_imageview_margin"
android:background="?android:attr/selectableItemBackground"
android:padding="15dp"
android:src="@drawable/ic_help"
android:tint="@color/icon_grey"/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</android.support.v7.widget.CardView> </android.support.v7.widget.CardView>

View File

@ -35,7 +35,6 @@
<string name="update_available">يتوفر تحديث</string> <string name="update_available">يتوفر تحديث</string>
<string name="installed">مثبت</string> <string name="installed">مثبت</string>
<string name="not_installed">غير مثبت</string> <string name="not_installed">غير مثبت</string>
<string name="changelog">التغييرات</string>
<!--Log Fragment--> <!--Log Fragment-->
<string name="menuSaveToSd">حفظ إلى بطاقة ذاكرة SD</string> <string name="menuSaveToSd">حفظ إلى بطاقة ذاكرة SD</string>
@ -65,8 +64,6 @@
<string name="download_install">تنزيل وتثبيت</string> <string name="download_install">تنزيل وتثبيت</string>
<string name="download_file_error">خطأ تنزيل الملف</string> <string name="download_file_error">خطأ تنزيل الملف</string>
<string name="install_error">خطأ في التثبيت!</string> <string name="install_error">خطأ في التثبيت!</string>
<string name="manual_install_1">الملف المضغوط وضع في %1$s</string>
<string name="manual_install_2">التثبيت في الإسترداد يدوياً</string>
<string name="invalid_zip">الملف المضغوط ليس إضافة Magisk!!</string> <string name="invalid_zip">الملف المضغوط ليس إضافة Magisk!!</string>
<string name="reboot_title">التثبيت نجح!</string> <string name="reboot_title">التثبيت نجح!</string>
<string name="reboot_msg">هل تريد إعادة التشغيل الآن؟</string> <string name="reboot_msg">هل تريد إعادة التشغيل الآن؟</string>

View File

@ -65,7 +65,6 @@
<string name="update_available">Update verfügbar</string> <string name="update_available">Update verfügbar</string>
<string name="installed">Installiert</string> <string name="installed">Installiert</string>
<string name="not_installed">Nicht installiert</string> <string name="not_installed">Nicht installiert</string>
<string name="changelog">Änderungen</string>
<!--Log Fragment--> <!--Log Fragment-->
<string name="menuSaveToSd">Log auf SD-Karte speichern</string> <string name="menuSaveToSd">Log auf SD-Karte speichern</string>
@ -97,8 +96,6 @@
<string name="goto_install">Zu \"Installieren\" wechseln</string> <string name="goto_install">Zu \"Installieren\" wechseln</string>
<string name="download_file_error">Fehler beim Herunterladen der Datei</string> <string name="download_file_error">Fehler beim Herunterladen der Datei</string>
<string name="install_error">Fehler bei der Installation!</string> <string name="install_error">Fehler bei der Installation!</string>
<string name="manual_install_1">Zip-Datei unter %1$s gespeichert</string>
<string name="manual_install_2">Manuell mittels Recovery flashen</string>
<string name="invalid_zip">Die Zip-Datei ist kein Magisk-Modul!</string> <string name="invalid_zip">Die Zip-Datei ist kein Magisk-Modul!</string>
<string name="reboot_title">Installation erfolgreich!</string> <string name="reboot_title">Installation erfolgreich!</string>
<string name="reboot_msg">Möchtest du jetzt neustarten?</string> <string name="reboot_msg">Möchtest du jetzt neustarten?</string>
@ -114,7 +111,7 @@
<string name="magisk_update_title">Neues Magisk-Update verfügbar!</string> <string name="magisk_update_title">Neues Magisk-Update verfügbar!</string>
<string name="magisk_update_message">Magisk-Update v%1$.1f ist verfügbar, möchtest du es installieren?</string> <string name="magisk_update_message">Magisk-Update v%1$.1f ist verfügbar, möchtest du es installieren?</string>
<string name="settings_reboot_toast">Neustarten, um die Änderungen anzuwenden</string> <string name="settings_reboot_toast">Neustarten, um die Änderungen anzuwenden</string>
<string name="check_release_notes">Änderungen anzeigen</string> <string name="release_notes">Änderungen</string>
<string name="repo_cache_cleared">Repo-Cache gelöscht</string> <string name="repo_cache_cleared">Repo-Cache gelöscht</string>
<string name="safetyNet_hide_notice">Diese App benutzt SafetyNet, welches standardmäßig von Magisk Hide gehandhabt</string> <string name="safetyNet_hide_notice">Diese App benutzt SafetyNet, welches standardmäßig von Magisk Hide gehandhabt</string>
<string name="start_magiskhide">Starte Magisk Hide…</string> <string name="start_magiskhide">Starte Magisk Hide…</string>

View File

@ -35,7 +35,6 @@
<string name="update_available">Actualización disponible</string> <string name="update_available">Actualización disponible</string>
<string name="installed">Instalado</string> <string name="installed">Instalado</string>
<string name="not_installed">No Instalado</string> <string name="not_installed">No Instalado</string>
<string name="changelog">Cambios</string>
<!--Log Fragment--> <!--Log Fragment-->
<string name="menuSaveToSd">Salvar a SD</string> <string name="menuSaveToSd">Salvar a SD</string>
@ -65,7 +64,6 @@
<string name="download_install">Descargar e instalar</string> <string name="download_install">Descargar e instalar</string>
<string name="download_file_error">Error descargando fichero</string> <string name="download_file_error">Error descargando fichero</string>
<string name="install_error">¡Error en la instalación!</string> <string name="install_error">¡Error en la instalación!</string>
<string name="manual_install_1">Error flasheando fichero, zip colocado en %1$s\nFlashear manualmente desde recovery</string>
<string name="invalid_zip">¡El zip no es un Módulo Magisk!</string> <string name="invalid_zip">¡El zip no es un Módulo Magisk!</string>
<string name="reboot_title">¡Instalación correcta!</string> <string name="reboot_title">¡Instalación correcta!</string>
<string name="reboot_msg">¿Deseas reiniciar ahora?</string> <string name="reboot_msg">¿Deseas reiniciar ahora?</string>

View File

@ -60,7 +60,6 @@
<string name="update_available">Aggiornamento disponibile</string> <string name="update_available">Aggiornamento disponibile</string>
<string name="installed">Installato</string> <string name="installed">Installato</string>
<string name="not_installed">Non installato</string> <string name="not_installed">Non installato</string>
<string name="changelog">Changelog</string>
<!--Log Fragment--> <!--Log Fragment-->
<string name="menuSaveToSd">Salva nella SD</string> <string name="menuSaveToSd">Salva nella SD</string>
@ -90,7 +89,6 @@
<string name="download_install">Scarica e installa</string> <string name="download_install">Scarica e installa</string>
<string name="download_file_error">Errore nel download del file</string> <string name="download_file_error">Errore nel download del file</string>
<string name="install_error">Errore di installazione!</string> <string name="install_error">Errore di installazione!</string>
<string name="manual_install_1">Errore nel flash del file, il file zip è in %1$s\nFlash esegui il flash manuale</string>
<string name="invalid_zip">Lo zip non è un Modulo Magisk!!</string> <string name="invalid_zip">Lo zip non è un Modulo Magisk!!</string>
<string name="reboot_title">Installazione completata</string> <string name="reboot_title">Installazione completata</string>
<string name="reboot_msg">Vuoi riavviare ora?</string> <string name="reboot_msg">Vuoi riavviare ora?</string>

View File

@ -33,7 +33,6 @@
<string name="update_available">Update Beschikbaar</string> <string name="update_available">Update Beschikbaar</string>
<string name="installed">Geïnstalleerd</string> <string name="installed">Geïnstalleerd</string>
<string name="not_installed">Niet geïnstalleerd</string> <string name="not_installed">Niet geïnstalleerd</string>
<string name="changelog">Changelog</string>
<!--Log Fragment--> <!--Log Fragment-->
<string name="menuSaveToSd">Opslaan op SD-kaart</string> <string name="menuSaveToSd">Opslaan op SD-kaart</string>
@ -63,7 +62,6 @@
<string name="download_install">Downloaden en installeren</string> <string name="download_install">Downloaden en installeren</string>
<string name="download_file_error">Er is een fout opgetreden bij het downloaden van het bestand</string> <string name="download_file_error">Er is een fout opgetreden bij het downloaden van het bestand</string>
<string name="install_error">Er is een fout opgetreden in de installatie</string> <string name="install_error">Er is een fout opgetreden in de installatie</string>
<string name="manual_install_1">Er is een fout opgetreden in het flashen van het bestand. Het zip bestand is opgeslagen in %1$s\nFlash het handmatig in recovery modus.</string>
<string name="invalid_zip">Zip bestand is geen Magisk Module!</string> <string name="invalid_zip">Zip bestand is geen Magisk Module!</string>
<string name="reboot_title">Installatie succesvol!</string> <string name="reboot_title">Installatie succesvol!</string>
<string name="reboot_msg">Wilt u nu rebooten?</string> <string name="reboot_msg">Wilt u nu rebooten?</string>

View File

@ -64,7 +64,6 @@
<string name="update_available">Aktualizacja jest dostępna</string> <string name="update_available">Aktualizacja jest dostępna</string>
<string name="installed">Zainstalowany</string> <string name="installed">Zainstalowany</string>
<string name="not_installed">Nie zainstalowany</string> <string name="not_installed">Nie zainstalowany</string>
<string name="changelog">Zmiany</string>
<!--Log Fragment--> <!--Log Fragment-->
<string name="menuSaveToSd">Zapisz na SD</string> <string name="menuSaveToSd">Zapisz na SD</string>
@ -96,8 +95,6 @@
<string name="goto_install">Idź do sekcji \"Instalacja\"</string> <string name="goto_install">Idź do sekcji \"Instalacja\"</string>
<string name="download_file_error">Błąd pobierania pliku</string> <string name="download_file_error">Błąd pobierania pliku</string>
<string name="install_error">Błąd instalacji!</string> <string name="install_error">Błąd instalacji!</string>
<string name="manual_install_1">Plik zip umieszczony w %1$s</string>
<string name="manual_install_2">Zainstaluj go ręcznie w recovery</string>
<string name="invalid_zip">Ten zip nie jest Modułem Magisk!!</string> <string name="invalid_zip">Ten zip nie jest Modułem Magisk!!</string>
<string name="reboot_title">Instalacja zakończona powodzeniem!</string> <string name="reboot_title">Instalacja zakończona powodzeniem!</string>
<string name="reboot_msg">Czy chcesz teraz ponownie uruchomić?</string> <string name="reboot_msg">Czy chcesz teraz ponownie uruchomić?</string>
@ -113,7 +110,7 @@
<string name="magisk_update_title">Nowa Wersja Magisk Dostępna!</string> <string name="magisk_update_title">Nowa Wersja Magisk Dostępna!</string>
<string name="magisk_update_message">Magisk v%1$.1f jest dostępny, chcesz zainstalować?</string> <string name="magisk_update_message">Magisk v%1$.1f jest dostępny, chcesz zainstalować?</string>
<string name="settings_reboot_toast">Uruchom ponownie, aby zastosować ustawienia</string> <string name="settings_reboot_toast">Uruchom ponownie, aby zastosować ustawienia</string>
<string name="check_release_notes">Sprawdź zmiany</string> <string name="release_notes">Zmiany</string>
<string name="repo_cache_cleared">Cache repozytorium wyczyszczone</string> <string name="repo_cache_cleared">Cache repozytorium wyczyszczone</string>
<string name="safetyNet_hide_notice">Ta aplikacja wykorzystuje SafetyNet\nJest już domyślnie obsługiwana przez MagiskHide</string> <string name="safetyNet_hide_notice">Ta aplikacja wykorzystuje SafetyNet\nJest już domyślnie obsługiwana przez MagiskHide</string>
<string name="start_magiskhide">Uruchamianie MagiskHide …</string> <string name="start_magiskhide">Uruchamianie MagiskHide …</string>

View File

@ -61,7 +61,6 @@
<string name="update_available">Atualização disponível</string> <string name="update_available">Atualização disponível</string>
<string name="installed">Instalado</string> <string name="installed">Instalado</string>
<string name="not_installed">Não Instalado</string> <string name="not_installed">Não Instalado</string>
<string name="changelog">Registro de mudança</string>
<!--Log Fragment--> <!--Log Fragment-->
<string name="menuSaveToSd">Salvar no SD</string> <string name="menuSaveToSd">Salvar no SD</string>
@ -93,8 +92,6 @@
<string name="goto_install">Ir na seção \"Instalar\"</string> <string name="goto_install">Ir na seção \"Instalar\"</string>
<string name="download_file_error">Erro ao baixar o arquivo</string> <string name="download_file_error">Erro ao baixar o arquivo</string>
<string name="install_error">Erro na instalação!</string> <string name="install_error">Erro na instalação!</string>
<string name="manual_install_1">Erro ao flashear o arquivo, arquivo zip colocado em %1$s</string>
<string name="manual_install_2">Flashear isto na recuperação manualmente</string>
<string name="invalid_zip">O zip não é um Módulo Magisk!!</string> <string name="invalid_zip">O zip não é um Módulo Magisk!!</string>
<string name="reboot_title">Instalação bem-sucedida!</string> <string name="reboot_title">Instalação bem-sucedida!</string>
<string name="reboot_msg">Você quer reiniciar agora?</string> <string name="reboot_msg">Você quer reiniciar agora?</string>
@ -110,7 +107,7 @@
<string name="magisk_update_title">Nova atualização do Magisk disponível!</string> <string name="magisk_update_title">Nova atualização do Magisk disponível!</string>
<string name="magisk_update_message">Magisk v%1$.1f Atualização está pronta, você quer instalar?</string> <string name="magisk_update_message">Magisk v%1$.1f Atualização está pronta, você quer instalar?</string>
<string name="settings_reboot_toast">Reinicie para aplicar configurações</string> <string name="settings_reboot_toast">Reinicie para aplicar configurações</string>
<string name="check_release_notes">Verificar as notas da atualização</string> <string name="release_notes">Notas da atualização</string>
<string name="repo_cache_cleared">Cache do Repo. limpado</string> <string name="repo_cache_cleared">Cache do Repo. limpado</string>
<string name="safetyNet_hide_notice">Este aplicativo usa SafetyNet\nJá manipulado pelo MagiskHide por padrão</string> <string name="safetyNet_hide_notice">Este aplicativo usa SafetyNet\nJá manipulado pelo MagiskHide por padrão</string>
<string name="start_magiskhide">Iniciando MagiskHide …</string> <string name="start_magiskhide">Iniciando MagiskHide …</string>

View File

@ -59,7 +59,6 @@
<string name="update_available">Доступно обновление</string> <string name="update_available">Доступно обновление</string>
<string name="installed">Установлен</string> <string name="installed">Установлен</string>
<string name="not_installed">Не установлен</string> <string name="not_installed">Не установлен</string>
<string name="changelog">Изменения</string>
<!--Log Fragment--> <!--Log Fragment-->
<string name="menuSaveToSd">Сохранить на SD-карту</string> <string name="menuSaveToSd">Сохранить на SD-карту</string>
@ -91,8 +90,7 @@
<string name="goto_install">Перейти в раздел «Установка»</string> <string name="goto_install">Перейти в раздел «Установка»</string>
<string name="download_file_error">Ошибка при скачивании файла</string> <string name="download_file_error">Ошибка при скачивании файла</string>
<string name="install_error">Ошибка при установке!</string> <string name="install_error">Ошибка при установке!</string>
<string name="manual_install_1">Zip-файл помещён в %1$s</string> а
<string name="manual_install_2">Прошейте руками через рекавери</string>а
<string name="invalid_zip">Этот архив не содержит модуль Magisk!!</string> <string name="invalid_zip">Этот архив не содержит модуль Magisk!!</string>
<string name="reboot_title">Установка успешна!</string> <string name="reboot_title">Установка успешна!</string>
<string name="reboot_msg">Вы хотите перезагрузиться?</string> <string name="reboot_msg">Вы хотите перезагрузиться?</string>
@ -108,7 +106,7 @@
<string name="magisk_update_title">Доступно обновление Magisk!</string> <string name="magisk_update_title">Доступно обновление Magisk!</string>
<string name="magisk_update_message">Вышел Magisk версии v%1$.1f, установить?</string> <string name="magisk_update_message">Вышел Magisk версии v%1$.1f, установить?</string>
<string name="settings_reboot_toast">Перезагрузитесь для применения изменений</string> <string name="settings_reboot_toast">Перезагрузитесь для применения изменений</string>
<string name="check_release_notes">Посмотреть примечания к выпуску</string> <string name="release_notes">Примечания к выпуску</string>
<string name="repo_cache_cleared">Кэш репозиториев очищен</string> <string name="repo_cache_cleared">Кэш репозиториев очищен</string>
<string name="safetyNet_hide_notice">Это приложение использует SafetyNet\nУже обработано MagiskHide по умолчанию</string> <string name="safetyNet_hide_notice">Это приложение использует SafetyNet\nУже обработано MagiskHide по умолчанию</string>
<string name="start_magiskhide">Запуск MagiskHide…</string> <string name="start_magiskhide">Запуск MagiskHide…</string>

View File

@ -61,7 +61,6 @@
<string name="update_available">可更新</string> <string name="update_available">可更新</string>
<string name="installed">已安装</string> <string name="installed">已安装</string>
<string name="not_installed">未安装</string> <string name="not_installed">未安装</string>
<string name="changelog">更新日志</string>
<!--Log Fragment--> <!--Log Fragment-->
<string name="menuSaveToSd">保存到 SD 卡</string> <string name="menuSaveToSd">保存到 SD 卡</string>
@ -93,8 +92,6 @@
<string name="goto_install">前往“安装”界面</string> <string name="goto_install">前往“安装”界面</string>
<string name="download_file_error">下载文件时出错</string> <string name="download_file_error">下载文件时出错</string>
<string name="install_error">安装出错!</string> <string name="install_error">安装出错!</string>
<string name="manual_install_1">Zip 文件已保存至 %1$s</string>
<string name="manual_install_2">请在 Recovery 中手动刷入</string>
<string name="invalid_zip">此 zip 文件不是 Magisk 模块!!</string> <string name="invalid_zip">此 zip 文件不是 Magisk 模块!!</string>
<string name="reboot_title">安装成功!</string> <string name="reboot_title">安装成功!</string>
<string name="reboot_msg">你想要立即重启吗?</string> <string name="reboot_msg">你想要立即重启吗?</string>
@ -110,7 +107,7 @@
<string name="magisk_update_title">Magisk 可更新!</string> <string name="magisk_update_title">Magisk 可更新!</string>
<string name="magisk_update_message">Magisk 已有新版本 v%1$.1f,你想要安装吗?</string> <string name="magisk_update_message">Magisk 已有新版本 v%1$.1f,你想要安装吗?</string>
<string name="settings_reboot_toast">重启以应用设置</string> <string name="settings_reboot_toast">重启以应用设置</string>
<string name="check_release_notes">查看发布说明</string> <string name="release_notes">发布说明</string>
<string name="repo_cache_cleared">资源库缓存已清除</string> <string name="repo_cache_cleared">资源库缓存已清除</string>
<string name="safetyNet_hide_notice">此应用使用了 SafetyNet\n已默认由 MagiskHide 处理</string> <string name="safetyNet_hide_notice">此应用使用了 SafetyNet\n已默认由 MagiskHide 处理</string>
<string name="start_magiskhide">正在启动 MagiskHide …</string> <string name="start_magiskhide">正在启动 MagiskHide …</string>

View File

@ -10,6 +10,5 @@
<dimen name="card_layout_padding">10dp</dimen> <dimen name="card_layout_padding">10dp</dimen>
<dimen name="card_textview_width">300dip</dimen> <dimen name="card_textview_width">300dip</dimen>
<dimen name="checkbox_padding">3dp</dimen> <dimen name="checkbox_padding">3dp</dimen>
<dimen name="card_imageview_margin">10dp</dimen>
<dimen name="card_appicon_size">50dp</dimen> <dimen name="card_appicon_size">50dp</dimen>
</resources> </resources>

View File

@ -64,7 +64,6 @@
<string name="update_available">Update Available</string> <string name="update_available">Update Available</string>
<string name="installed">Installed</string> <string name="installed">Installed</string>
<string name="not_installed">Not Installed</string> <string name="not_installed">Not Installed</string>
<string name="changelog">Changelog</string>
<!--Log Fragment--> <!--Log Fragment-->
<string name="menuSaveToSd">Save to SD</string> <string name="menuSaveToSd">Save to SD</string>
@ -91,14 +90,13 @@
<string name="no_thanks">No thanks</string> <string name="no_thanks">No thanks</string>
<string name="yes">Yes</string> <string name="yes">Yes</string>
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="close">Close</string>
<string name="repo_install_title">Install %1$s</string> <string name="repo_install_title">Install %1$s</string>
<string name="repo_install_msg">Do you want to install %1$s ?</string> <string name="repo_install_msg">Do you want to install %1$s ?</string>
<string name="download_install">Download &amp; install</string> <string name="download_install">Download &amp; install</string>
<string name="goto_install">Go to \"Install\" section</string> <string name="goto_install">Go to \"Install\" section</string>
<string name="download_file_error">Error downloading file</string> <string name="download_file_error">Error downloading file</string>
<string name="install_error">Installation error!</string> <string name="install_error">Installation error!</string>
<string name="manual_install_1">Zip file placed in %1$s</string>
<string name="manual_install_2">Flash it in recovery manually</string>
<string name="invalid_zip">The zip is not a Magisk Module!!</string> <string name="invalid_zip">The zip is not a Magisk Module!!</string>
<string name="reboot_title">Installation succeeded!</string> <string name="reboot_title">Installation succeeded!</string>
<string name="reboot_msg">Do you want to reboot now?</string> <string name="reboot_msg">Do you want to reboot now?</string>
@ -114,7 +112,7 @@
<string name="magisk_update_title">New Magisk Update Available!</string> <string name="magisk_update_title">New Magisk Update Available!</string>
<string name="magisk_update_message">Magisk v%1$.1f update is live, do you want to install?</string> <string name="magisk_update_message">Magisk v%1$.1f update is live, do you want to install?</string>
<string name="settings_reboot_toast">Reboot to apply settings</string> <string name="settings_reboot_toast">Reboot to apply settings</string>
<string name="check_release_notes">Check release notes</string> <string name="release_notes">Release notes</string>
<string name="repo_cache_cleared">Repo cache cleared</string> <string name="repo_cache_cleared">Repo cache cleared</string>
<string name="safetyNet_hide_notice">This app uses SafetyNet\nAlready handled by MagiskHide by default</string> <string name="safetyNet_hide_notice">This app uses SafetyNet\nAlready handled by MagiskHide by default</string>
<string name="start_magiskhide">Starting MagiskHide …</string> <string name="start_magiskhide">Starting MagiskHide …</string>