Revision 2971588c
Added by Leszek Koltunski almost 5 years ago
| src/main/java/org/distorted/dialogs/RubikDialogInfo.java | ||
|---|---|---|
| 21 | 21 |
|
| 22 | 22 |
import android.app.Dialog; |
| 23 | 23 |
import android.content.DialogInterface; |
| 24 |
import android.content.Intent; |
|
| 25 | 24 |
import android.os.Bundle; |
| 26 | 25 |
import android.util.DisplayMetrics; |
| 27 | 26 |
import android.util.TypedValue; |
| ... | ... | |
| 39 | 38 |
import org.distorted.main.R; |
| 40 | 39 |
import org.distorted.main.RubikActivity; |
| 41 | 40 |
import org.distorted.objects.TwistyObject; |
| 42 |
import org.distorted.tutorial.TutorialActivity; |
|
| 43 | 41 |
|
| 44 | 42 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 45 | 43 |
|
| ... | ... | |
| 75 | 73 |
public void onClick(DialogInterface dialog, int which) |
| 76 | 74 |
{
|
| 77 | 75 |
RubikActivity ract = (RubikActivity)getContext(); |
| 78 |
if( ract!=null ) ract.switchTutorial(); |
|
| 76 |
if( ract!=null ) ract.switchTutorial("QMzeJobSu1M");
|
|
| 79 | 77 |
} |
| 80 | 78 |
}); |
| 81 | 79 |
|
| src/main/java/org/distorted/main/RubikActivity.java | ||
|---|---|---|
| 555 | 555 |
|
| 556 | 556 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 557 | 557 |
|
| 558 |
public void switchTutorial() |
|
| 558 |
public void switchTutorial(String url)
|
|
| 559 | 559 |
{
|
| 560 | 560 |
Intent myIntent = new Intent(this, TutorialActivity.class); |
| 561 |
//myIntent.putExtra("", value); //Optional parameters
|
|
| 561 |
myIntent.putExtra("url", url);
|
|
| 562 | 562 |
startActivity(myIntent); |
| 563 | 563 |
} |
| 564 | 564 |
} |
| src/main/java/org/distorted/states/RubikStateBase.java | ||
|---|---|---|
| 23 | 23 |
import android.widget.ImageButton; |
| 24 | 24 |
import android.widget.LinearLayout; |
| 25 | 25 |
|
| 26 |
import org.distorted.dialogs.RubikDialogInfo; |
|
| 27 | 26 |
import org.distorted.main.R; |
| 28 | 27 |
import org.distorted.main.RubikActivity; |
| 29 | 28 |
import org.distorted.main.RubikPreRender; |
| ... | ... | |
| 37 | 36 |
{
|
| 38 | 37 |
private static final int DURATION_MILLIS = 750; |
| 39 | 38 |
|
| 40 |
private ImageButton mPrevButton, mLockButton, mInfoButton;
|
|
| 39 |
private ImageButton mPrevButton, mLockButton; |
|
| 41 | 40 |
|
| 42 | 41 |
private boolean mCanPrevMove; |
| 43 | 42 |
|
| ... | ... | |
| 133 | 132 |
layoutLeft.addView(mPrevButton); |
| 134 | 133 |
setupLockButton(act,width); |
| 135 | 134 |
layoutMid.addView(mLockButton); |
| 136 |
setupInfoButton(act,width); |
|
| 137 |
layoutMid.addView(mInfoButton); |
|
| 138 | 135 |
layoutRight.addView(button); |
| 139 | 136 |
|
| 140 | 137 |
layoutBot.addView(layoutLeft); |
| ... | ... | |
| 159 | 156 |
}); |
| 160 | 157 |
} |
| 161 | 158 |
|
| 162 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 163 |
|
|
| 164 |
void setupInfoButton(final RubikActivity act, final float width) |
|
| 165 |
{
|
|
| 166 |
int icon = RubikActivity.getDrawable(R.drawable.ui_small_info,R.drawable.ui_medium_info, R.drawable.ui_big_info, R.drawable.ui_huge_info); |
|
| 167 |
mInfoButton = new TransparentImageButton(act, icon, width,LinearLayout.LayoutParams.MATCH_PARENT); |
|
| 168 |
|
|
| 169 |
mInfoButton.setOnClickListener( new View.OnClickListener() |
|
| 170 |
{
|
|
| 171 |
@Override |
|
| 172 |
public void onClick(View v) |
|
| 173 |
{
|
|
| 174 |
RubikDialogInfo infoDiag = new RubikDialogInfo(); |
|
| 175 |
infoDiag.show(act.getSupportFragmentManager(), null); |
|
| 176 |
} |
|
| 177 |
}); |
|
| 178 |
} |
|
| 179 |
|
|
| 180 | 159 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 181 | 160 |
|
| 182 | 161 |
void setupPrevButton(final RubikActivity act, final float width) |
| src/main/java/org/distorted/states/RubikStatePlay.java | ||
|---|---|---|
| 35 | 35 |
import androidx.fragment.app.FragmentManager; |
| 36 | 36 |
|
| 37 | 37 |
import org.distorted.dialogs.RubikDialogAbout; |
| 38 |
import org.distorted.dialogs.RubikDialogInfo; |
|
| 38 | 39 |
import org.distorted.dialogs.RubikDialogPattern; |
| 39 | 40 |
import org.distorted.dialogs.RubikDialogScores; |
| 40 | 41 |
import org.distorted.main.R; |
| ... | ... | |
| 50 | 51 |
public static final int DEF_OBJECT= ObjectList.CUBE.ordinal(); |
| 51 | 52 |
public static final int DEF_SIZE = 3; |
| 52 | 53 |
|
| 53 |
private static int[] BUTTON_LABELS = { R.string.scores, R.string.patterns, R.string.solver, R.string.about };
|
|
| 54 |
private static int[] BUTTON_LABELS = { R.string.scores, R.string.patterns, R.string.solver, R.string.tutorials, R.string.about };
|
|
| 54 | 55 |
private static final int NUM_BUTTONS = BUTTON_LABELS.length; |
| 55 | 56 |
|
| 56 | 57 |
private ImageButton mObjButton, mMenuButton, mSolveButton; |
| ... | ... | |
| 395 | 396 |
break; |
| 396 | 397 |
case 2: StateList.switchState(act, StateList.SVER); |
| 397 | 398 |
break; |
| 398 |
case 3: RubikDialogAbout aDiag = new RubikDialogAbout(); |
|
| 399 |
case 3: RubikDialogInfo infoDiag = new RubikDialogInfo(); |
|
| 400 |
infoDiag.show(act.getSupportFragmentManager(), null); |
|
| 401 |
break; |
|
| 402 |
case 4: RubikDialogAbout aDiag = new RubikDialogAbout(); |
|
| 399 | 403 |
aDiag.show(act.getSupportFragmentManager(), null); |
| 400 | 404 |
break; |
| 401 | 405 |
} |
| src/main/java/org/distorted/tutorial/TutorialActivity.java | ||
|---|---|---|
| 46 | 46 |
|
| 47 | 47 |
public class TutorialActivity extends AppCompatActivity |
| 48 | 48 |
{
|
| 49 |
private static final String URL = "https://www.youtube.com/embed/"; |
|
| 50 |
|
|
| 49 | 51 |
public static final float DIALOG_BUTTON_SIZE = 0.06f; |
| 50 | 52 |
public static final float MENU_BIG_TEXT_SIZE = 0.05f; |
| 51 | 53 |
|
| ... | ... | |
| 62 | 64 |
private FirebaseAnalytics mFirebaseAnalytics; |
| 63 | 65 |
private static int mScreenWidth, mScreenHeight; |
| 64 | 66 |
private int mCurrentApiVersion; |
| 65 |
private WebView mWebView; |
|
| 66 | 67 |
private TutorialState mState; |
| 68 |
private String mURL; |
|
| 67 | 69 |
|
| 68 | 70 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 69 | 71 |
|
| ... | ... | |
| 75 | 77 |
setTheme(R.style.CustomActivityThemeNoActionBar); |
| 76 | 78 |
setContentView(R.layout.tutorial); |
| 77 | 79 |
|
| 80 |
Bundle b = getIntent().getExtras(); |
|
| 81 |
|
|
| 82 |
if(b != null) mURL = b.getString("url");
|
|
| 83 |
|
|
| 78 | 84 |
mIsLocked = false; |
| 79 | 85 |
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this); |
| 80 | 86 |
|
| ... | ... | |
| 128 | 134 |
paramsL.width = (int)(width*(1.0f-RATIO)); |
| 129 | 135 |
viewL.setLayoutParams(paramsL); |
| 130 | 136 |
|
| 131 |
LinearLayout viewR = findViewById(R.id.rightBar);
|
|
| 137 |
LinearLayout viewR = findViewById(R.id.tutorialRightBar);
|
|
| 132 | 138 |
ViewGroup.LayoutParams paramsR = viewR.getLayoutParams(); |
| 133 | 139 |
paramsR.width = (int)(width*RATIO); |
| 134 | 140 |
viewR.setLayoutParams(paramsR); |
| ... | ... | |
| 139 | 145 |
if( mState==null ) mState = new TutorialState(); |
| 140 | 146 |
|
| 141 | 147 |
mState.createRightPane(this,width); |
| 148 |
|
|
| 149 |
WebView videoView = findViewById(R.id.tutorialVideoView); |
|
| 150 |
TutorialWebView webView = new TutorialWebView(this,videoView); |
|
| 151 |
webView.load(URL+mURL); |
|
| 142 | 152 |
} |
| 143 | 153 |
|
| 144 | 154 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| src/main/java/org/distorted/tutorial/TutorialState.java | ||
|---|---|---|
| 213 | 213 |
if( mMoves==null ) mMoves = new ArrayList<>(); |
| 214 | 214 |
else mMoves.clear(); |
| 215 | 215 |
|
| 216 |
LinearLayout layout = act.findViewById(R.id.rightBar);
|
|
| 216 |
LinearLayout layout = act.findViewById(R.id.tutorialRightBar);
|
|
| 217 | 217 |
layout.removeAllViews(); |
| 218 | 218 |
|
| 219 | 219 |
setupPrevButton(act,width); |
| src/main/java/org/distorted/tutorial/TutorialSurfaceView.java | ||
|---|---|---|
| 1 | 1 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 2 |
// Copyright 2019 Leszek Koltunski //
|
|
| 2 |
// Copyright 2020 Leszek Koltunski //
|
|
| 3 | 3 |
// // |
| 4 | 4 |
// This file is part of Magic Cube. // |
| 5 | 5 |
// // |
| ... | ... | |
| 32 | 32 |
|
| 33 | 33 |
import org.distorted.library.type.Static2D; |
| 34 | 34 |
import org.distorted.library.type.Static4D; |
| 35 |
import org.distorted.main.RubikActivity; |
|
| 36 | 35 |
import org.distorted.objects.Movement; |
| 37 | 36 |
import org.distorted.objects.TwistyObject; |
| 38 |
import org.distorted.states.RubikStateSolving; |
|
| 39 |
import org.distorted.states.StateList; |
|
| 40 | 37 |
|
| 41 | 38 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 42 | 39 |
|
| src/main/java/org/distorted/tutorial/TutorialWebView.java | ||
|---|---|---|
| 1 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 2 |
// Copyright 2020 Leszek Koltunski // |
|
| 3 |
// // |
|
| 4 |
// This file is part of Magic Cube. // |
|
| 5 |
// // |
|
| 6 |
// Magic Cube is free software: you can redistribute it and/or modify // |
|
| 7 |
// it under the terms of the GNU General Public License as published by // |
|
| 8 |
// the Free Software Foundation, either version 2 of the License, or // |
|
| 9 |
// (at your option) any later version. // |
|
| 10 |
// // |
|
| 11 |
// Magic Cube is distributed in the hope that it will be useful, // |
|
| 12 |
// but WITHOUT ANY WARRANTY; without even the implied warranty of // |
|
| 13 |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // |
|
| 14 |
// GNU General Public License for more details. // |
|
| 15 |
// // |
|
| 16 |
// You should have received a copy of the GNU General Public License // |
|
| 17 |
// along with Magic Cube. If not, see <http://www.gnu.org/licenses/>. // |
|
| 18 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 19 |
|
|
| 20 |
package org.distorted.tutorial; |
|
| 21 |
|
|
| 22 |
import android.annotation.SuppressLint; |
|
| 23 |
import android.content.Context; |
|
| 24 |
import android.content.res.Resources; |
|
| 25 |
import android.webkit.WebSettings; |
|
| 26 |
import android.webkit.WebView; |
|
| 27 |
|
|
| 28 |
import org.distorted.main.R; |
|
| 29 |
|
|
| 30 |
import java.io.BufferedReader; |
|
| 31 |
import java.io.InputStream; |
|
| 32 |
import java.io.InputStreamReader; |
|
| 33 |
|
|
| 34 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 35 |
|
|
| 36 |
public class TutorialWebView |
|
| 37 |
{
|
|
| 38 |
private String mUrl; |
|
| 39 |
private Context mContext; |
|
| 40 |
private WebView mWebView; |
|
| 41 |
|
|
| 42 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 43 |
|
|
| 44 |
@SuppressLint("SetJavaScriptEnabled")
|
|
| 45 |
public TutorialWebView(Context context, WebView webview) |
|
| 46 |
{
|
|
| 47 |
mWebView = webview; |
|
| 48 |
mContext = context; |
|
| 49 |
mWebView.setBackgroundColor(0); |
|
| 50 |
mWebView.getSettings().setJavaScriptEnabled(true); |
|
| 51 |
} |
|
| 52 |
|
|
| 53 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 54 |
|
|
| 55 |
public void load(String url) |
|
| 56 |
{
|
|
| 57 |
mUrl = url; |
|
| 58 |
String data = readFromfile(mContext); |
|
| 59 |
data = data.replace("%1", url);
|
|
| 60 |
|
|
| 61 |
android.util.Log.e("webview", "data= "+data);
|
|
| 62 |
|
|
| 63 |
mWebView.getSettings().setAppCacheMaxSize( 10 * 1024 * 1024 ); // 10MB |
|
| 64 |
mWebView.getSettings().setAppCachePath(mContext.getCacheDir().getAbsolutePath() ); |
|
| 65 |
mWebView.getSettings().setAllowFileAccess( true ); |
|
| 66 |
mWebView.getSettings().setAppCacheEnabled( true ); |
|
| 67 |
mWebView.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT ); |
|
| 68 |
|
|
| 69 |
mWebView.loadData(data, "text/html", "UTF-8"); |
|
| 70 |
} |
|
| 71 |
|
|
| 72 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 73 |
|
|
| 74 |
public String readFromfile(Context context) |
|
| 75 |
{
|
|
| 76 |
StringBuilder returnString = new StringBuilder(); |
|
| 77 |
InputStream fIn = null; |
|
| 78 |
InputStreamReader isr = null; |
|
| 79 |
BufferedReader input = null; |
|
| 80 |
|
|
| 81 |
try |
|
| 82 |
{
|
|
| 83 |
Resources res = context.getResources(); |
|
| 84 |
fIn = res.openRawResource(R.raw.webvideo); |
|
| 85 |
isr = new InputStreamReader(fIn); |
|
| 86 |
input = new BufferedReader(isr); |
|
| 87 |
String line; |
|
| 88 |
|
|
| 89 |
while ((line = input.readLine()) != null) |
|
| 90 |
{
|
|
| 91 |
returnString.append(line); |
|
| 92 |
} |
|
| 93 |
} |
|
| 94 |
catch (Exception e) |
|
| 95 |
{
|
|
| 96 |
e.getMessage(); |
|
| 97 |
} |
|
| 98 |
finally |
|
| 99 |
{
|
|
| 100 |
try |
|
| 101 |
{
|
|
| 102 |
if (isr != null) isr.close(); |
|
| 103 |
if (fIn != null) fIn.close(); |
|
| 104 |
if (input != null) input.close(); |
|
| 105 |
} |
|
| 106 |
catch (Exception e2) |
|
| 107 |
{
|
|
| 108 |
e2.getMessage(); |
|
| 109 |
} |
|
| 110 |
} |
|
| 111 |
|
|
| 112 |
return returnString.toString(); |
|
| 113 |
} |
|
| 114 |
|
|
| 115 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 116 |
|
|
| 117 |
public void reload() |
|
| 118 |
{
|
|
| 119 |
if (mUrl!=null) |
|
| 120 |
{
|
|
| 121 |
load(mUrl); |
|
| 122 |
} |
|
| 123 |
} |
|
| 124 |
} |
|
| src/main/res/layout/tutorial.xml | ||
|---|---|---|
| 8 | 8 |
android:orientation="vertical" > |
| 9 | 9 |
|
| 10 | 10 |
<WebView |
| 11 |
android:id="@+id/videoview"
|
|
| 11 |
android:id="@+id/tutorialVideoView"
|
|
| 12 | 12 |
android:layout_width="match_parent" |
| 13 | 13 |
android:layout_height="0dp" |
| 14 | 14 |
android:layout_weight="1"/> |
| 15 | 15 |
|
| 16 | 16 |
<LinearLayout |
| 17 |
android:id="@+id/lowerPart"
|
|
| 17 |
android:id="@+id/tutorialLowerPart"
|
|
| 18 | 18 |
android:layout_width="match_parent" |
| 19 | 19 |
android:layout_height="0dp" |
| 20 | 20 |
android:layout_weight="1.2" |
| ... | ... | |
| 27 | 27 |
android:layout_height="match_parent"/> |
| 28 | 28 |
|
| 29 | 29 |
<LinearLayout |
| 30 |
android:id="@+id/rightBar"
|
|
| 30 |
android:id="@+id/tutorialRightBar"
|
|
| 31 | 31 |
android:layout_width="0dp" |
| 32 | 32 |
android:layout_height="match_parent" |
| 33 | 33 |
|
| src/main/res/raw/webvideo.html | ||
|---|---|---|
| 1 |
<!DOCTYPE html> |
|
| 2 |
<html lang="en"> |
|
| 3 |
<head> |
|
| 4 |
<meta charset="utf-8"> |
|
| 5 |
<style> |
|
| 6 |
iframe { border: 0; position:fixed; width:100%; height:100%; bgcolor="#000000"; }
|
|
| 7 |
body { margin: 0; bgcolor="#000000"; }
|
|
| 8 |
</style> |
|
| 9 |
</head> |
|
| 10 |
<body> |
|
| 11 |
<iframe src="%1" frameborder="0" allowfullscreen></iframe> |
|
| 12 |
</body> |
|
| 13 |
</html> |
|
| src/main/res/values-de/strings.xml | ||
|---|---|---|
| 34 | 34 |
<string name="new_name_try_again">Der von Ihnen ausgewählte Name %s ist bereits vergeben. Versuchen Sie es noch einmal:</string> |
| 35 | 35 |
<string name="downloading">Wird heruntergeladen…</string> |
| 36 | 36 |
<string name="submitting">Einreichen…</string> |
| 37 |
<string name="tutorial">Sehen Sie sich ein Tutorial an?</string> |
|
| 37 |
<string name="tutorial">Sehen Sie sich ein Lernprogramm an?</string> |
|
| 38 |
<string name="tutorials">Lernprogrammen</string> |
|
| 38 | 39 |
|
| 39 | 40 |
<string name="credits1">Open Source App, die mit der Distorted Graphics Library entwickelt wurde. Lizenziert unter <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html">GPL Version 2</a> oder wie gewünscht einer späteren Version.</string> |
| 40 | 41 |
<string name="credits2">Hübsche Muster von Walter Randelshofer. Sehen Sie <a href="http://www.randelshofer.ch">http://www.randelshofer.ch</a></string> |
| src/main/res/values-es/strings.xml | ||
|---|---|---|
| 35 | 35 |
<string name="downloading">Descargando…</string> |
| 36 | 36 |
<string name="submitting">Enviando…</string> |
| 37 | 37 |
<string name="tutorial">¿Ver un tutorial?</string> |
| 38 |
<string name="tutorials">Tutoriales</string> |
|
| 38 | 39 |
|
| 39 | 40 |
<string name="credits1">Aplicación de código abierto desarrollada con la biblioteca de gráficos de Distorted. Con licencia <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html">GPL versión 2</a> o, a tu elección, cualquier versión posterior.</string> |
| 40 | 41 |
<string name="credits2">Pretty Patterns por Walter Randelshofer. Mira <a href="http://www.randelshofer.ch">http://www.randelshofer.ch</a></string> |
| src/main/res/values-fr/strings.xml | ||
|---|---|---|
| 35 | 35 |
<string name="downloading">Téléchargement…</string> |
| 36 | 36 |
<string name="submitting">Soumission…</string> |
| 37 | 37 |
<string name="tutorial">Regarder un tutoriel?</string> |
| 38 |
<string name="tutorials">Tutoriels</string> |
|
| 38 | 39 |
|
| 39 | 40 |
<string name="credits1">Appli Open Source développée à l\'aide de la bibliothèque graphique Distorted. Sous licence <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html">GPL version 2</a> ou - à votre choix - toute version ultérieure.</string> |
| 40 | 41 |
<string name="credits2">Pretty Patterns par Walter Randelshofer. Voir <a href="http://www.randelshofer.ch">http://www.randelshofer.ch</a></string> |
| src/main/res/values-it/strings.xml | ||
|---|---|---|
| 35 | 35 |
<string name="downloading">Download in corso…</string> |
| 36 | 36 |
<string name="submitting">Invio in corso…</string> |
| 37 | 37 |
<string name="tutorial">Guarda un tutorial?</string> |
| 38 |
<string name="tutorials">Tutorial</string> |
|
| 38 | 39 |
|
| 39 | 40 |
<string name="credits1">App open source sviluppata utilizzando la libreria grafica distorta. Licenza sotto <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html">GPL versione 2</a> o - a tua scelta - qualsiasi versione successiva.</string> |
| 40 | 41 |
<string name="credits2">Pretty Patterns di Walter Randelshofer. Vedere <a href="http://www.randelshofer.ch">http://www.randelshofer.ch</a></string> |
| src/main/res/values-ja/strings.xml | ||
|---|---|---|
| 35 | 35 |
<string name="downloading">ダウンロードしています…</string> |
| 36 | 36 |
<string name="submitting">送信しています…</string> |
| 37 | 37 |
<string name="tutorial">チュートリアルを見ますか?</string> |
| 38 |
<string name="tutorials">チュートリアル</string> |
|
| 38 | 39 |
|
| 39 | 40 |
<string name="credits1">ディストートグラフィックのライブラリを使用して開発されたオープンソースアプリ。<a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html">GPL バージョン 2</a>でライセンスされているか、または-オプション-それ以降のすべてのバージョン。</string> |
| 40 | 41 |
<string name="credits2">Pretty Patterns 沿って Walter Randelshofer. 見る <a href="http://www.randelshofer.ch">http://www.randelshofer.ch</a></string> |
| src/main/res/values-ko/strings.xml | ||
|---|---|---|
| 35 | 35 |
<string name="downloading">다운로드 중…</string> |
| 36 | 36 |
<string name="submitting">제출 중…</string> |
| 37 | 37 |
<string name="tutorial">튜토리얼을 보시겠습니까?</string> |
| 38 |
<string name="tutorials">튜토리얼</string> |
|
| 38 | 39 |
|
| 39 | 40 |
<string name="credits1">왜곡된 그래픽 라이브러리를 사용하여 개발된 오픈 소스 앱. <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html">GPL 버전 2</a> 또는 귀하의 선택에 따라 최신 버전으로 라이센스가 부여됩니다.</string> |
| 40 | 41 |
<string name="credits2">Pretty Patterns 으로 Walter Randelshofer. 보다 <a href="http://www.randelshofer.ch">http://www.randelshofer.ch</a></string> |
| src/main/res/values-pl/strings.xml | ||
|---|---|---|
| 35 | 35 |
<string name="downloading">Ściąganie…</string> |
| 36 | 36 |
<string name="submitting">Przesyłanie…</string> |
| 37 | 37 |
<string name="tutorial">Zobacz tutorial?</string> |
| 38 |
<string name="tutorials">Tutoriale</string> |
|
| 38 | 39 |
|
| 39 | 40 |
<string name="credits1">Aplikacja open-source napisana wykorzystując bibliotekę Distorted. Licencja: <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html">GPL wersja 2</a> albo jakakolwiek poźniejsza.</string> |
| 40 | 41 |
<string name="credits2">Piękne Wzory Waltera Randelshofera. Zobacz <a href="http://www.randelshofer.ch">http://www.randelshofer.ch</a></string> |
| src/main/res/values-ru/strings.xml | ||
|---|---|---|
| 35 | 35 |
<string name="downloading">Загрузка…</string> |
| 36 | 36 |
<string name="submitting">Добавляю…</string> |
| 37 | 37 |
<string name="tutorial">Смотрите учебник?</string> |
| 38 |
<string name="tutorials">Учебники</string> |
|
| 38 | 39 |
|
| 39 | 40 |
<string name="credits1">Приложение с открытым исходным кодом, разработанное с использованием библиотеки графики Искажений. Лицензируется согласно <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html">версии 2 GPL</a> или любой более поздней версии по вашему выбору.</string> |
| 40 | 41 |
<string name="credits2">Pretty Patterns по Walter Randelshofer. Смотри <a href="http://www.randelshofer.ch">http://www.randelshofer.ch</a></string> |
| src/main/res/values-zh-rCN/strings.xml | ||
|---|---|---|
| 35 | 35 |
<string name="downloading">正在下载……</string> |
| 36 | 36 |
<string name="submitting">正在提交……</string> |
| 37 | 37 |
<string name="tutorial">观看教程?</string> |
| 38 |
<string name="tutorials">讲解</string> |
|
| 38 | 39 |
|
| 39 | 40 |
<string name="credits1">此应用程式原始码开发使用Distorted图型库。根据<a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html">通用公共许可版本2</a>或者任何更新版本(根据您的选择)进行许可。</string> |
| 40 | 41 |
<string name="credits2">Pretty Patterns by Werner Randelshofer. 請看 <a href="http://www.randelshofer.ch">http://www.randelshofer.ch</a></string> |
| src/main/res/values-zh-rTW/strings.xml | ||
|---|---|---|
| 35 | 35 |
<string name="downloading">正在下載……</string> |
| 36 | 36 |
<string name="submitting">正在傳送……</string> |
| 37 | 37 |
<string name="tutorial">觀看教程?</string> |
| 38 |
<string name="tutorials">講解</string> |
|
| 38 | 39 |
|
| 39 | 40 |
<string name="credits1">此應用程式原始碼開發使用Distorted圖型庫。根據<a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html">通用公共許可版本2</a>或者任何更新版本(根據您的選擇)進行許可。</string> |
| 40 | 41 |
<string name="credits2">Pretty Patterns by Werner Randelshofer. 請看 <a href="http://www.randelshofer.ch">http://www.randelshofer.ch</a></string> |
| src/main/res/values/strings.xml | ||
|---|---|---|
| 36 | 36 |
<string name="downloading">Downloading…</string> |
| 37 | 37 |
<string name="submitting">Submitting…</string> |
| 38 | 38 |
<string name="tutorial">Watch a tutorial?</string> |
| 39 |
<string name="tutorials">Tutorials</string> |
|
| 39 | 40 |
|
| 40 | 41 |
<string name="credits1">Open Source app developed using the Distorted graphics library. Licensed under <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html">GPL version 2</a> or - at your option - any later version.</string> |
| 41 | 42 |
<string name="credits2">Pretty Patterns by Walter Randelshofer. See <a href="http://www.randelshofer.ch">http://www.randelshofer.ch</a></string> |
Also available in: Unified diff
Progress creating the Tutorial Activity.