«
Previous
|
Next
»
Revision 40d02f47
Added by Leszek Koltunski 3 days ago
- ID 40d02f47b58d01bbf64af7445aeb7e5460fb7357
- Child a96b9267
.gitignore | ||
---|---|---|
1 |
/build |
build.gradle | ||
---|---|---|
1 |
plugins { |
|
2 |
id 'com.android.application' |
|
3 |
} |
|
4 |
|
|
5 |
android { |
|
6 |
namespace 'org.distorted.phasedsolver' |
|
7 |
compileSdk 34 |
|
8 |
|
|
9 |
defaultConfig { |
|
10 |
applicationId "org.distorted.phasedsolver" |
|
11 |
minSdk 21 |
|
12 |
targetSdk 34 |
|
13 |
versionCode 1 |
|
14 |
versionName "1.0" |
|
15 |
|
|
16 |
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" |
|
17 |
} |
|
18 |
|
|
19 |
buildTypes { |
|
20 |
release { |
|
21 |
minifyEnabled false |
|
22 |
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' |
|
23 |
} |
|
24 |
} |
|
25 |
compileOptions { |
|
26 |
sourceCompatibility JavaVersion.VERSION_1_8 |
|
27 |
targetCompatibility JavaVersion.VERSION_1_8 |
|
28 |
} |
|
29 |
} |
|
30 |
|
|
31 |
dependencies { |
|
32 |
api project(':distorted-objectlib') |
|
33 |
implementation project(':distorted-os-android') |
|
34 |
implementation ('androidx.preference:preference:1.2.1') |
|
35 |
} |
|
36 |
|
proguard-rules.pro | ||
---|---|---|
1 |
# Add project specific ProGuard rules here. |
|
2 |
# You can control the set of applied configuration files using the |
|
3 |
# proguardFiles setting in build.gradle. |
|
4 |
# |
|
5 |
# For more details, see |
|
6 |
# http://developer.android.com/guide/developing/tools/proguard.html |
|
7 |
|
|
8 |
# If your project uses WebView with JS, uncomment the following |
|
9 |
# and specify the fully qualified class name to the JavaScript interface |
|
10 |
# class: |
|
11 |
#-keepclassmembers class fqcn.of.javascript.interface.for.webview { |
|
12 |
# public *; |
|
13 |
#} |
|
14 |
|
|
15 |
# Uncomment this to preserve the line number information for |
|
16 |
# debugging stack traces. |
|
17 |
#-keepattributes SourceFile,LineNumberTable |
|
18 |
|
|
19 |
# If you keep the line number information, uncomment this to |
|
20 |
# hide the original source file name. |
|
21 |
#-renamesourcefileattribute SourceFile |
src/main/AndroidManifest.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8"?> |
|
2 |
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> |
|
3 |
|
|
4 |
<uses-feature android:glEsVersion="0x00030000" android:required="true" /> |
|
5 |
<uses-feature android:name="android.hardware.faketouch" android:required="true" /> |
|
6 |
|
|
7 |
<supports-screens android:largeScreens="true" android:xlargeScreens="true" /> |
|
8 |
|
|
9 |
<application |
|
10 |
android:allowBackup="true" |
|
11 |
android:icon="@mipmap/ic_launcher" |
|
12 |
android:label="@string/app_name" |
|
13 |
android:supportsRtl="true" |
|
14 |
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> |
|
15 |
|
|
16 |
<activity android:name="org.distorted.phasedsolver.SolverActivity" android:exported="true" android:screenOrientation="portrait"> |
|
17 |
<intent-filter> |
|
18 |
<action android:name="android.intent.action.MAIN" /> |
|
19 |
<category android:name="android.intent.category.LAUNCHER" /> |
|
20 |
</intent-filter> |
|
21 |
</activity> |
|
22 |
</application> |
|
23 |
</manifest> |
src/main/java/org/distorted/phasedsolver/SolverActivity.java | ||
---|---|---|
1 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
2 |
// Copyright 2024 Leszek Koltunski // |
|
3 |
// // |
|
4 |
// This file is part of Magic Cube. // |
|
5 |
// // |
|
6 |
// Magic Cube is proprietary software licensed under an EULA which you should have received // |
|
7 |
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html // |
|
8 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
9 |
|
|
10 |
package org.distorted.phasedsolver; |
|
11 |
|
|
12 |
import static org.distorted.objectlib.main.TwistyObject.MODE_NORM; |
|
13 |
|
|
14 |
import android.app.Activity; |
|
15 |
import android.content.SharedPreferences; |
|
16 |
import android.os.Bundle; |
|
17 |
import android.view.View; |
|
18 |
import androidx.preference.PreferenceManager; |
|
19 |
|
|
20 |
import org.distorted.library.main.DistortedLibrary; |
|
21 |
import org.distorted.objectlib.main.InitAssets; |
|
22 |
import org.distorted.objectlib.main.ObjectControl; |
|
23 |
import org.distorted.objectlib.metadata.ListObjects; |
|
24 |
import org.distorted.os.OSInterface; |
|
25 |
|
|
26 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
27 |
|
|
28 |
public class SolverActivity extends Activity |
|
29 |
{ |
|
30 |
private InitAssets mAsset; |
|
31 |
private SharedPreferences mPreferences; |
|
32 |
|
|
33 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
34 |
|
|
35 |
@Override |
|
36 |
protected void onCreate(Bundle icicle) |
|
37 |
{ |
|
38 |
super.onCreate(icicle); |
|
39 |
mPreferences = PreferenceManager.getDefaultSharedPreferences(this); |
|
40 |
DistortedLibrary.onCreate(); |
|
41 |
setContentView(R.layout.mainlayout); |
|
42 |
SolverSurfaceView view = findViewById(R.id.solverView); |
|
43 |
OSInterface os = view.getInterface(); |
|
44 |
mAsset = new InitAssets(null,null,os); |
|
45 |
} |
|
46 |
|
|
47 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
48 |
|
|
49 |
@Override |
|
50 |
protected void onPause() |
|
51 |
{ |
|
52 |
super.onPause(); |
|
53 |
SolverSurfaceView view = findViewById(R.id.solverView); |
|
54 |
view.onPause(); |
|
55 |
DistortedLibrary.onPause(); |
|
56 |
|
|
57 |
savePreferences(); |
|
58 |
} |
|
59 |
|
|
60 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
61 |
|
|
62 |
@Override |
|
63 |
protected void onResume() |
|
64 |
{ |
|
65 |
super.onResume(); |
|
66 |
SolverSurfaceView view = findViewById(R.id.solverView); |
|
67 |
view.onResume(); |
|
68 |
DistortedLibrary.onResume(); |
|
69 |
|
|
70 |
restorePreferences(); |
|
71 |
|
|
72 |
ObjectControl control = getControl(); |
|
73 |
control.changeObject( ListObjects.CUBE_3.ordinal(), MODE_NORM, mAsset); |
|
74 |
} |
|
75 |
|
|
76 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
77 |
|
|
78 |
@Override |
|
79 |
protected void onDestroy() |
|
80 |
{ |
|
81 |
DistortedLibrary.onDestroy(); |
|
82 |
super.onDestroy(); |
|
83 |
} |
|
84 |
|
|
85 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
86 |
|
|
87 |
private ObjectControl getControl() |
|
88 |
{ |
|
89 |
SolverSurfaceView view = findViewById(R.id.solverView); |
|
90 |
return view.getObjectControl(); |
|
91 |
} |
|
92 |
|
|
93 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
94 |
|
|
95 |
private void savePreferences() |
|
96 |
{ |
|
97 |
SharedPreferences.Editor editor = mPreferences.edit(); |
|
98 |
SolverSurfaceView view = findViewById(R.id.solverView); |
|
99 |
OSInterface os = view.getInterface(); |
|
100 |
os.setEditor(editor); |
|
101 |
view.getObjectControl().savePreferences(); |
|
102 |
|
|
103 |
editor.apply(); |
|
104 |
} |
|
105 |
|
|
106 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
107 |
|
|
108 |
private void restorePreferences() |
|
109 |
{ |
|
110 |
SolverSurfaceView view = findViewById(R.id.solverView); |
|
111 |
OSInterface os = view.getInterface(); |
|
112 |
os.setPreferences(mPreferences); |
|
113 |
view.getObjectControl().restorePreferences(); |
|
114 |
} |
|
115 |
|
|
116 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
117 |
|
|
118 |
public void Reset(View v) |
|
119 |
{ |
|
120 |
|
|
121 |
} |
|
122 |
|
|
123 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
124 |
|
|
125 |
public void Solve(View v) |
|
126 |
{ |
|
127 |
|
|
128 |
} |
|
129 |
|
|
130 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
131 |
|
|
132 |
public void Left(View v) |
|
133 |
{ |
|
134 |
|
|
135 |
} |
|
136 |
|
|
137 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
138 |
|
|
139 |
public void Right(View v) |
|
140 |
{ |
|
141 |
|
|
142 |
} |
|
143 |
} |
src/main/java/org/distorted/phasedsolver/SolverObjectLibInterface.java | ||
---|---|---|
1 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
2 |
// Copyright 2024 Leszek Koltunski // |
|
3 |
// // |
|
4 |
// This file is part of Magic Cube. // |
|
5 |
// // |
|
6 |
// Magic Cube is proprietary software licensed under an EULA which you should have received // |
|
7 |
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html // |
|
8 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
9 |
|
|
10 |
package org.distorted.phasedsolver; |
|
11 |
|
|
12 |
import org.distorted.objectlib.helpers.ObjectLibInterface; |
|
13 |
|
|
14 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
15 |
|
|
16 |
public class SolverObjectLibInterface implements ObjectLibInterface |
|
17 |
{ |
|
18 |
public void onWinEffectFinished(long startTime, long endTime, String debug, int scrambleNum) { } |
|
19 |
public void onScrambleEffectFinished() { } |
|
20 |
public void onBeginRotation() { } |
|
21 |
public void onSolved() { } |
|
22 |
public void onObjectCreated(long time) { } |
|
23 |
public void onRemoveRotation(int axis, int row, int angle) { } |
|
24 |
public void failedToDrag() { } |
|
25 |
public void reportBlockProblem(int type, int place, long pause, long resume, long time) { } |
|
26 |
public void reportProblem(String problem, boolean reportException) {} |
|
27 |
|
|
28 |
public void onReplaceModeDown(int cubit, int face) { } |
|
29 |
public void onReplaceModeUp() { } |
|
30 |
public void reportJSONError(String error, int ordinal) { } |
|
31 |
} |
src/main/java/org/distorted/phasedsolver/SolverRenderer.java | ||
---|---|---|
1 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
2 |
// Copyright 2024 Leszek Koltunski // |
|
3 |
// // |
|
4 |
// This file is part of Magic Cube. // |
|
5 |
// // |
|
6 |
// Magic Cube is proprietary software licensed under an EULA which you should have received // |
|
7 |
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html // |
|
8 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
9 |
|
|
10 |
package org.distorted.phasedsolver; |
|
11 |
|
|
12 |
import android.content.res.Resources; |
|
13 |
import android.opengl.GLSurfaceView; |
|
14 |
|
|
15 |
import org.distorted.library.effect.EffectType; |
|
16 |
import org.distorted.library.effect.PostprocessEffectBorder; |
|
17 |
import org.distorted.library.effect.VertexEffectQuaternion; |
|
18 |
import org.distorted.library.effect.VertexEffectRotate; |
|
19 |
import org.distorted.library.main.DistortedLibrary; |
|
20 |
import org.distorted.library.main.DistortedScreen; |
|
21 |
import org.distorted.library.mesh.MeshBase; |
|
22 |
import org.distorted.objectlib.effects.BaseEffect; |
|
23 |
import org.distorted.objectlib.main.ObjectControl; |
|
24 |
|
|
25 |
import java.io.InputStream; |
|
26 |
|
|
27 |
import javax.microedition.khronos.egl.EGLConfig; |
|
28 |
import javax.microedition.khronos.opengles.GL10; |
|
29 |
|
|
30 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
31 |
|
|
32 |
class SolverRenderer implements GLSurfaceView.Renderer, DistortedLibrary.LibraryUser |
|
33 |
{ |
|
34 |
static final float BRIGHTNESS = 0.30f; |
|
35 |
|
|
36 |
private final SolverSurfaceView mView; |
|
37 |
private final DistortedScreen mScreen; |
|
38 |
private final Resources mResources; |
|
39 |
|
|
40 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
41 |
|
|
42 |
SolverRenderer(SolverSurfaceView v) |
|
43 |
{ |
|
44 |
mView = v; |
|
45 |
mResources = v.getResources(); |
|
46 |
mScreen = new DistortedScreen(); |
|
47 |
mScreen.glClearColor(BRIGHTNESS, BRIGHTNESS, BRIGHTNESS, 1.0f); |
|
48 |
} |
|
49 |
|
|
50 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
51 |
|
|
52 |
DistortedScreen getScreen() |
|
53 |
{ |
|
54 |
return mScreen; |
|
55 |
} |
|
56 |
|
|
57 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
58 |
|
|
59 |
public void onDrawFrame(GL10 glUnused) |
|
60 |
{ |
|
61 |
long time = System.currentTimeMillis(); |
|
62 |
mView.getObjectControl().preRender(); |
|
63 |
mScreen.render(time); |
|
64 |
} |
|
65 |
|
|
66 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
67 |
|
|
68 |
public void onSurfaceChanged(GL10 glUnused, int width, int height) |
|
69 |
{ |
|
70 |
mScreen.resize(width,height); |
|
71 |
mView.setScreenSize(width,height); |
|
72 |
} |
|
73 |
|
|
74 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
75 |
|
|
76 |
public void onSurfaceCreated(GL10 glUnused, EGLConfig config) |
|
77 |
{ |
|
78 |
DistortedLibrary.setMax(EffectType.VERTEX,ObjectControl.MAX_QUATS+1); |
|
79 |
MeshBase.setMaxEffComponents(ObjectControl.MAX_MOVING_PARTS); |
|
80 |
|
|
81 |
VertexEffectRotate.enable(); |
|
82 |
VertexEffectQuaternion.enable(); |
|
83 |
PostprocessEffectBorder.enable(); |
|
84 |
BaseEffect.Type.enableEffects(); |
|
85 |
|
|
86 |
DistortedLibrary.onSurfaceCreated(this); |
|
87 |
} |
|
88 |
|
|
89 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
90 |
|
|
91 |
public void distortedException(Exception ex) |
|
92 |
{ |
|
93 |
android.util.Log.e("Solver", ex.getMessage() ); |
|
94 |
} |
|
95 |
|
|
96 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
97 |
|
|
98 |
public InputStream localFile(int fileID) |
|
99 |
{ |
|
100 |
return mResources.openRawResource(fileID); |
|
101 |
} |
|
102 |
|
|
103 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
104 |
|
|
105 |
public void logMessage(String message) |
|
106 |
{ |
|
107 |
android.util.Log.e("Solver", message ); |
|
108 |
} |
|
109 |
} |
src/main/java/org/distorted/phasedsolver/SolverSurfaceView.java | ||
---|---|---|
1 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
2 |
// Copyright 2024 Leszek Koltunski // |
|
3 |
// // |
|
4 |
// This file is part of Magic Cube. // |
|
5 |
// // |
|
6 |
// Magic Cube is proprietary software licensed under an EULA which you should have received // |
|
7 |
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html // |
|
8 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
9 |
|
|
10 |
package org.distorted.phasedsolver; |
|
11 |
|
|
12 |
import static org.distorted.objectlib.main.ObjectControl.MODE_ROTATE; |
|
13 |
|
|
14 |
import android.app.ActivityManager; |
|
15 |
import android.content.Context; |
|
16 |
import android.content.pm.ConfigurationInfo; |
|
17 |
import android.opengl.GLSurfaceView; |
|
18 |
import android.util.AttributeSet; |
|
19 |
import android.view.MotionEvent; |
|
20 |
|
|
21 |
import org.distorted.objectlib.main.ObjectControl; |
|
22 |
import org.distorted.objectlib.main.TwistyObjectNode; |
|
23 |
import org.distorted.os.OSInterface; |
|
24 |
|
|
25 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
26 |
|
|
27 |
class SolverSurfaceView extends GLSurfaceView |
|
28 |
{ |
|
29 |
private ObjectControl mObjectController; |
|
30 |
private OSInterface mInterface; |
|
31 |
private SolverRenderer mRenderer; |
|
32 |
private int mScreenWidth; |
|
33 |
private boolean mCreated; |
|
34 |
|
|
35 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
36 |
|
|
37 |
void setScreenSize(int width, int height) |
|
38 |
{ |
|
39 |
mScreenWidth = width; |
|
40 |
mObjectController.setScreenSizeAndScaling(width,height, Math.min(width,height) ); |
|
41 |
|
|
42 |
if( !mCreated ) |
|
43 |
{ |
|
44 |
mCreated = true; |
|
45 |
mObjectController.createNode(width,height); |
|
46 |
TwistyObjectNode objectNode = mObjectController.getNode(); |
|
47 |
mRenderer.getScreen().attach(objectNode); |
|
48 |
} |
|
49 |
} |
|
50 |
|
|
51 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
52 |
|
|
53 |
int getScreenWidth() |
|
54 |
{ |
|
55 |
return mScreenWidth; |
|
56 |
} |
|
57 |
|
|
58 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
59 |
|
|
60 |
ObjectControl getObjectControl() |
|
61 |
{ |
|
62 |
return mObjectController; |
|
63 |
} |
|
64 |
|
|
65 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
66 |
|
|
67 |
OSInterface getInterface() |
|
68 |
{ |
|
69 |
return mInterface; |
|
70 |
} |
|
71 |
|
|
72 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
73 |
|
|
74 |
SolverRenderer getRenderer() |
|
75 |
{ |
|
76 |
return mRenderer; |
|
77 |
} |
|
78 |
|
|
79 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
80 |
|
|
81 |
public SolverSurfaceView(Context context, AttributeSet attrs) |
|
82 |
{ |
|
83 |
super(context,attrs); |
|
84 |
|
|
85 |
mCreated = false; |
|
86 |
|
|
87 |
if(!isInEditMode()) |
|
88 |
{ |
|
89 |
SolverActivity act = (SolverActivity)context; |
|
90 |
SolverObjectLibInterface ref = new SolverObjectLibInterface(); |
|
91 |
mInterface = new OSInterface(act,ref); |
|
92 |
mObjectController = new ObjectControl(mInterface); |
|
93 |
|
|
94 |
mRenderer = new SolverRenderer(this); |
|
95 |
final ActivityManager activityManager= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); |
|
96 |
final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo(); |
|
97 |
int esVersion = configurationInfo.reqGlEsVersion>>16; |
|
98 |
setEGLContextClientVersion(esVersion); |
|
99 |
setRenderer(mRenderer); |
|
100 |
} |
|
101 |
} |
|
102 |
|
|
103 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
104 |
|
|
105 |
@Override |
|
106 |
public void onPause() |
|
107 |
{ |
|
108 |
super.onPause(); |
|
109 |
mObjectController.onPause(); |
|
110 |
} |
|
111 |
|
|
112 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
113 |
|
|
114 |
@Override |
|
115 |
public void onResume() |
|
116 |
{ |
|
117 |
super.onResume(); |
|
118 |
mObjectController.onResume(); |
|
119 |
} |
|
120 |
|
|
121 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
122 |
|
|
123 |
@Override |
|
124 |
public boolean onTouchEvent(MotionEvent event) |
|
125 |
{ |
|
126 |
mInterface.setMotionEvent(event); |
|
127 |
return mObjectController.onTouchEvent(MODE_ROTATE); |
|
128 |
} |
|
129 |
} |
|
130 |
|
src/main/res/drawable-v24/ic_launcher_foreground.xml | ||
---|---|---|
1 |
<vector xmlns:android="http://schemas.android.com/apk/res/android" |
|
2 |
xmlns:aapt="http://schemas.android.com/aapt" |
|
3 |
android:width="108dp" |
|
4 |
android:height="108dp" |
|
5 |
android:viewportWidth="108" |
|
6 |
android:viewportHeight="108"> |
|
7 |
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z"> |
|
8 |
<aapt:attr name="android:fillColor"> |
|
9 |
<gradient |
|
10 |
android:endX="85.84757" |
|
11 |
android:endY="92.4963" |
|
12 |
android:startX="42.9492" |
|
13 |
android:startY="49.59793" |
|
14 |
android:type="linear"> |
|
15 |
<item |
|
16 |
android:color="#44000000" |
|
17 |
android:offset="0.0" /> |
|
18 |
<item |
|
19 |
android:color="#00000000" |
|
20 |
android:offset="1.0" /> |
|
21 |
</gradient> |
|
22 |
</aapt:attr> |
|
23 |
</path> |
|
24 |
<path |
|
25 |
android:fillColor="#FFFFFF" |
|
26 |
android:fillType="nonZero" |
|
27 |
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z" |
|
28 |
android:strokeWidth="1" |
|
29 |
android:strokeColor="#00000000" /> |
|
30 |
</vector> |
src/main/res/drawable/ic_launcher_background.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8"?> |
|
2 |
<vector xmlns:android="http://schemas.android.com/apk/res/android" |
|
3 |
android:width="108dp" |
|
4 |
android:height="108dp" |
|
5 |
android:viewportWidth="108" |
|
6 |
android:viewportHeight="108"> |
|
7 |
<path |
|
8 |
android:fillColor="#3DDC84" |
|
9 |
android:pathData="M0,0h108v108h-108z" /> |
|
10 |
<path |
|
11 |
android:fillColor="#00000000" |
|
12 |
android:pathData="M9,0L9,108" |
|
13 |
android:strokeWidth="0.8" |
|
14 |
android:strokeColor="#33FFFFFF" /> |
|
15 |
<path |
|
16 |
android:fillColor="#00000000" |
|
17 |
android:pathData="M19,0L19,108" |
|
18 |
android:strokeWidth="0.8" |
|
19 |
android:strokeColor="#33FFFFFF" /> |
|
20 |
<path |
|
21 |
android:fillColor="#00000000" |
|
22 |
android:pathData="M29,0L29,108" |
|
23 |
android:strokeWidth="0.8" |
|
24 |
android:strokeColor="#33FFFFFF" /> |
|
25 |
<path |
|
26 |
android:fillColor="#00000000" |
|
27 |
android:pathData="M39,0L39,108" |
|
28 |
android:strokeWidth="0.8" |
|
29 |
android:strokeColor="#33FFFFFF" /> |
|
30 |
<path |
|
31 |
android:fillColor="#00000000" |
|
32 |
android:pathData="M49,0L49,108" |
|
33 |
android:strokeWidth="0.8" |
|
34 |
android:strokeColor="#33FFFFFF" /> |
|
35 |
<path |
|
36 |
android:fillColor="#00000000" |
|
37 |
android:pathData="M59,0L59,108" |
|
38 |
android:strokeWidth="0.8" |
|
39 |
android:strokeColor="#33FFFFFF" /> |
|
40 |
<path |
|
41 |
android:fillColor="#00000000" |
|
42 |
android:pathData="M69,0L69,108" |
|
43 |
android:strokeWidth="0.8" |
|
44 |
android:strokeColor="#33FFFFFF" /> |
|
45 |
<path |
|
46 |
android:fillColor="#00000000" |
|
47 |
android:pathData="M79,0L79,108" |
|
48 |
android:strokeWidth="0.8" |
|
49 |
android:strokeColor="#33FFFFFF" /> |
|
50 |
<path |
|
51 |
android:fillColor="#00000000" |
|
52 |
android:pathData="M89,0L89,108" |
|
53 |
android:strokeWidth="0.8" |
|
54 |
android:strokeColor="#33FFFFFF" /> |
|
55 |
<path |
|
56 |
android:fillColor="#00000000" |
|
57 |
android:pathData="M99,0L99,108" |
|
58 |
android:strokeWidth="0.8" |
|
59 |
android:strokeColor="#33FFFFFF" /> |
|
60 |
<path |
|
61 |
android:fillColor="#00000000" |
|
62 |
android:pathData="M0,9L108,9" |
|
63 |
android:strokeWidth="0.8" |
|
64 |
android:strokeColor="#33FFFFFF" /> |
|
65 |
<path |
|
66 |
android:fillColor="#00000000" |
|
67 |
android:pathData="M0,19L108,19" |
|
68 |
android:strokeWidth="0.8" |
|
69 |
android:strokeColor="#33FFFFFF" /> |
|
70 |
<path |
|
71 |
android:fillColor="#00000000" |
|
72 |
android:pathData="M0,29L108,29" |
|
73 |
android:strokeWidth="0.8" |
|
74 |
android:strokeColor="#33FFFFFF" /> |
|
75 |
<path |
|
76 |
android:fillColor="#00000000" |
|
77 |
android:pathData="M0,39L108,39" |
|
78 |
android:strokeWidth="0.8" |
|
79 |
android:strokeColor="#33FFFFFF" /> |
|
80 |
<path |
|
81 |
android:fillColor="#00000000" |
|
82 |
android:pathData="M0,49L108,49" |
|
83 |
android:strokeWidth="0.8" |
|
84 |
android:strokeColor="#33FFFFFF" /> |
|
85 |
<path |
|
86 |
android:fillColor="#00000000" |
|
87 |
android:pathData="M0,59L108,59" |
|
88 |
android:strokeWidth="0.8" |
|
89 |
android:strokeColor="#33FFFFFF" /> |
|
90 |
<path |
|
91 |
android:fillColor="#00000000" |
|
92 |
android:pathData="M0,69L108,69" |
|
93 |
android:strokeWidth="0.8" |
|
94 |
android:strokeColor="#33FFFFFF" /> |
|
95 |
<path |
|
96 |
android:fillColor="#00000000" |
|
97 |
android:pathData="M0,79L108,79" |
|
98 |
android:strokeWidth="0.8" |
|
99 |
android:strokeColor="#33FFFFFF" /> |
|
100 |
<path |
|
101 |
android:fillColor="#00000000" |
|
102 |
android:pathData="M0,89L108,89" |
|
103 |
android:strokeWidth="0.8" |
|
104 |
android:strokeColor="#33FFFFFF" /> |
|
105 |
<path |
|
106 |
android:fillColor="#00000000" |
|
107 |
android:pathData="M0,99L108,99" |
|
108 |
android:strokeWidth="0.8" |
|
109 |
android:strokeColor="#33FFFFFF" /> |
|
110 |
<path |
|
111 |
android:fillColor="#00000000" |
|
112 |
android:pathData="M19,29L89,29" |
|
113 |
android:strokeWidth="0.8" |
|
114 |
android:strokeColor="#33FFFFFF" /> |
|
115 |
<path |
|
116 |
android:fillColor="#00000000" |
|
117 |
android:pathData="M19,39L89,39" |
|
118 |
android:strokeWidth="0.8" |
|
119 |
android:strokeColor="#33FFFFFF" /> |
|
120 |
<path |
|
121 |
android:fillColor="#00000000" |
|
122 |
android:pathData="M19,49L89,49" |
|
123 |
android:strokeWidth="0.8" |
|
124 |
android:strokeColor="#33FFFFFF" /> |
|
125 |
<path |
|
126 |
android:fillColor="#00000000" |
|
127 |
android:pathData="M19,59L89,59" |
|
128 |
android:strokeWidth="0.8" |
|
129 |
android:strokeColor="#33FFFFFF" /> |
|
130 |
<path |
|
131 |
android:fillColor="#00000000" |
|
132 |
android:pathData="M19,69L89,69" |
|
133 |
android:strokeWidth="0.8" |
|
134 |
android:strokeColor="#33FFFFFF" /> |
|
135 |
<path |
|
136 |
android:fillColor="#00000000" |
|
137 |
android:pathData="M19,79L89,79" |
|
138 |
android:strokeWidth="0.8" |
|
139 |
android:strokeColor="#33FFFFFF" /> |
|
140 |
<path |
|
141 |
android:fillColor="#00000000" |
|
142 |
android:pathData="M29,19L29,89" |
|
143 |
android:strokeWidth="0.8" |
|
144 |
android:strokeColor="#33FFFFFF" /> |
|
145 |
<path |
|
146 |
android:fillColor="#00000000" |
|
147 |
android:pathData="M39,19L39,89" |
|
148 |
android:strokeWidth="0.8" |
|
149 |
android:strokeColor="#33FFFFFF" /> |
|
150 |
<path |
|
151 |
android:fillColor="#00000000" |
|
152 |
android:pathData="M49,19L49,89" |
|
153 |
android:strokeWidth="0.8" |
|
154 |
android:strokeColor="#33FFFFFF" /> |
|
155 |
<path |
|
156 |
android:fillColor="#00000000" |
|
157 |
android:pathData="M59,19L59,89" |
|
158 |
android:strokeWidth="0.8" |
|
159 |
android:strokeColor="#33FFFFFF" /> |
|
160 |
<path |
|
161 |
android:fillColor="#00000000" |
|
162 |
android:pathData="M69,19L69,89" |
|
163 |
android:strokeWidth="0.8" |
|
164 |
android:strokeColor="#33FFFFFF" /> |
|
165 |
<path |
|
166 |
android:fillColor="#00000000" |
|
167 |
android:pathData="M79,19L79,89" |
|
168 |
android:strokeWidth="0.8" |
|
169 |
android:strokeColor="#33FFFFFF" /> |
|
170 |
</vector> |
src/main/res/layout/mainlayout.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8"?> |
|
2 |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" |
|
3 |
android:id="@+id/relativeLayout" |
|
4 |
android:layout_width="match_parent" |
|
5 |
android:layout_height="match_parent" > |
|
6 |
|
|
7 |
<org.distorted.phasedsolver.SolverSurfaceView |
|
8 |
android:id="@+id/solverView" |
|
9 |
android:layout_width="match_parent" |
|
10 |
android:layout_height="match_parent" |
|
11 |
android:layout_alignParentStart="true" |
|
12 |
android:layout_alignParentTop="true"/> |
|
13 |
|
|
14 |
<LinearLayout |
|
15 |
android:id="@+id/upperBar" |
|
16 |
android:layout_alignParentTop="true" |
|
17 |
android:layout_width="match_parent" |
|
18 |
android:layout_height="80dp" |
|
19 |
android:gravity="center" |
|
20 |
android:orientation="horizontal" |
|
21 |
android:background="@android:color/transparent"> |
|
22 |
|
|
23 |
<Button |
|
24 |
android:id="@+id/solverReset" |
|
25 |
android:layout_width="0dp" |
|
26 |
android:layout_height="match_parent" |
|
27 |
android:layout_weight="1.0" |
|
28 |
android:gravity="center_vertical|center" |
|
29 |
android:text="@string/reset" |
|
30 |
android:onClick="Reset" |
|
31 |
android:textAppearance="?android:attr/textAppearanceMedium" |
|
32 |
android:layout_gravity="center_vertical"/> |
|
33 |
|
|
34 |
<Button |
|
35 |
android:id="@+id/solverSolve" |
|
36 |
android:layout_width="0dp" |
|
37 |
android:layout_height="match_parent" |
|
38 |
android:layout_weight="1.0" |
|
39 |
android:gravity="center_vertical|center" |
|
40 |
android:text="@string/solve" |
|
41 |
android:onClick="Solve" |
|
42 |
android:textAppearance="?android:attr/textAppearanceMedium" |
|
43 |
android:layout_gravity="center_vertical"/> |
|
44 |
|
|
45 |
</LinearLayout> |
|
46 |
|
|
47 |
<LinearLayout |
|
48 |
android:id="@+id/lowerBar" |
|
49 |
android:layout_alignParentBottom="true" |
|
50 |
android:layout_width="match_parent" |
|
51 |
android:layout_height="80dp" |
|
52 |
android:orientation="horizontal" |
|
53 |
android:background="@android:color/transparent"> |
|
54 |
|
|
55 |
<ImageButton |
|
56 |
android:id="@+id/solverLeft" |
|
57 |
android:background="@drawable/ui_left" |
|
58 |
android:layout_width="0dp" |
|
59 |
android:layout_height="match_parent" |
|
60 |
android:layout_weight="1.0" |
|
61 |
android:gravity="center_vertical|center" |
|
62 |
android:onClick="Left" |
|
63 |
android:layout_gravity="center_vertical"/> |
|
64 |
|
|
65 |
<TextView |
|
66 |
android:id="@+id/solverText" |
|
67 |
android:layout_width="0dp" |
|
68 |
android:layout_height="match_parent" |
|
69 |
android:layout_weight="4.0"/> |
|
70 |
|
|
71 |
<ImageButton |
|
72 |
android:id="@+id/solverRight" |
|
73 |
android:background="@drawable/ui_right" |
|
74 |
android:layout_width="0dp" |
|
75 |
android:layout_height="match_parent" |
|
76 |
android:layout_weight="1.0" |
|
77 |
android:gravity="center_vertical|center" |
|
78 |
android:onClick="Right" |
|
79 |
android:layout_gravity="center_vertical"/> |
|
80 |
</LinearLayout> |
|
81 |
|
|
82 |
</RelativeLayout> |
src/main/res/mipmap-anydpi-v26/ic_launcher.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8"?> |
|
2 |
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> |
|
3 |
<background android:drawable="@drawable/ic_launcher_background" /> |
|
4 |
<foreground android:drawable="@drawable/ic_launcher_foreground" /> |
|
5 |
<monochrome android:drawable="@drawable/ic_launcher_foreground" /> |
|
6 |
</adaptive-icon> |
src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8"?> |
|
2 |
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> |
|
3 |
<background android:drawable="@drawable/ic_launcher_background" /> |
|
4 |
<foreground android:drawable="@drawable/ic_launcher_foreground" /> |
|
5 |
<monochrome android:drawable="@drawable/ic_launcher_foreground" /> |
|
6 |
</adaptive-icon> |
src/main/res/values/colors.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8"?> |
|
2 |
<resources> |
|
3 |
<color name="colorPrimary">#008577</color> |
|
4 |
<color name="colorPrimaryDark">#00574B</color> |
|
5 |
<color name="colorAccent">#D81B60</color> |
|
6 |
<color name="red">#ffff0000</color> |
|
7 |
<color name="dark_grey">#ff222222</color> |
|
8 |
<color name="grey">#ff333333</color> |
|
9 |
<color name="light_grey">#ff555555</color> |
|
10 |
<color name="black">#ff010101</color> |
|
11 |
<color name="white">#ffffffff</color> |
|
12 |
</resources> |
src/main/res/values/strings.xml | ||
---|---|---|
1 |
<resources> |
|
2 |
<string name="app_name">Phased Solver</string> |
|
3 |
<string name="solve">Solve</string> |
|
4 |
<string name="reset">Reset</string> |
|
5 |
</resources> |
Also available in: Unified diff
Initial commit