Skip to content
This repository was archived by the owner on Dec 6, 2025. It is now read-only.

Commit 7d633d3

Browse files
committed
added discord user id asking thing, i think i broke the notifications so yea ignore that.
1 parent fdae113 commit 7d633d3

File tree

10 files changed

+556
-179
lines changed

10 files changed

+556
-179
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,6 @@
1313
.externalNativeBuild
1414
.cxx
1515
local.properties
16+
/app/release
17+
/app/debug
18+
/app/build

.idea/deploymentTargetSelector.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@
3131
android:name=".SetNotifsActivity"
3232
android:exported="false"
3333
android:enableOnBackInvokedCallback="true" />
34+
<activity
35+
android:name=".IdActivity"
36+
android:exported="false"
37+
android:enableOnBackInvokedCallback="false" />
3438
<service
3539
android:name=".BackgroundService"
3640
android:exported="false"

app/src/main/java/com/unixity/gagstock/BackgroundService.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,14 @@ public void onLost(@NonNull Network network) {
5151
}
5252

5353
private void connectToEndpointInService() {
54-
SharedPreferences prefs = getApplicationContext().getSharedPreferences("notif_prefs", MODE_PRIVATE);
54+
SharedPreferences prefs = getApplicationContext().getSharedPreferences("prefs", MODE_PRIVATE);
5555
OkHttpClient client = new OkHttpClient();
56-
56+
if (prefs.getInt("dcid", 0) == 0)
57+
{
58+
stopSelf();
59+
}
5760
okhttp3.Request request = new okhttp3.Request.Builder()
58-
.url("wss://websocket.joshlei.com/growagarden/")
61+
.url("wss://websocket.joshlei.com/growagarden?user_id=" + prefs.getInt("dcid", 0))
5962
.build();
6063

6164
client.newWebSocket(request, new WebSocketListener() {
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
package com.unixity.gagstock;
2+
3+
import android.app.ActivityManager;
4+
import android.content.Context;
5+
import android.content.Intent;
6+
import android.content.SharedPreferences;
7+
import android.net.Uri;
8+
import android.os.Bundle;
9+
import android.text.Html;
10+
import android.text.method.LinkMovementMethod;
11+
import android.util.Log;
12+
import android.widget.Button;
13+
import android.widget.EditText;
14+
import android.widget.TextView;
15+
import android.widget.Toast;
16+
17+
import androidx.activity.EdgeToEdge;
18+
import androidx.appcompat.app.AppCompatActivity;
19+
import androidx.core.graphics.Insets;
20+
import androidx.core.view.ViewCompat;
21+
import androidx.core.view.WindowInsetsCompat;
22+
23+
import org.json.JSONArray;
24+
import org.json.JSONObject;
25+
26+
import java.util.HashMap;
27+
import java.util.List;
28+
import java.util.Map;
29+
import java.util.concurrent.CountDownLatch;
30+
import java.util.concurrent.TimeUnit;
31+
32+
import okhttp3.OkHttpClient;
33+
import okhttp3.Request;
34+
import okhttp3.Response;
35+
import okhttp3.WebSocket;
36+
import okhttp3.WebSocketListener;
37+
38+
public class IdActivity extends AppCompatActivity {
39+
@Override
40+
protected void onCreate(Bundle savedInstanceState) {
41+
super.onCreate(savedInstanceState);
42+
EdgeToEdge.enable(this);
43+
setContentView(R.layout.activity_id);
44+
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.start_activity), (v, insets) -> {
45+
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
46+
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
47+
return insets;
48+
});
49+
50+
findViewById(R.id.joinDiscord).setOnClickListener(v ->
51+
{
52+
Intent intent = new Intent(Intent.ACTION_VIEW);
53+
intent.setData(Uri.parse("https://discord.com/invite/kCryJ8zPwy"));
54+
intent.addCategory(Intent.CATEGORY_BROWSABLE);
55+
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
56+
});
57+
58+
findViewById(R.id.finish).setOnClickListener(v -> {
59+
EditText idText = findViewById(R.id.textIdEdit);
60+
String dcId = idText.getText().toString();
61+
idText.setText(R.string.validating);
62+
if (connectToEndpoint(dcId))
63+
{
64+
SharedPreferences prefs = getSharedPreferences("prefs", MODE_PRIVATE);
65+
SharedPreferences.Editor editor = prefs.edit();
66+
try {
67+
editor.putInt("dcid", Integer.parseInt(dcId));
68+
if (editor.commit()) {
69+
finish();
70+
}
71+
} catch (NumberFormatException e) {
72+
Toast.makeText(this, "Only put numbers!", Toast.LENGTH_SHORT).show();
73+
}
74+
}
75+
});
76+
}
77+
78+
private boolean isMyServiceRunning(Class<?> serviceClass) {
79+
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
80+
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
81+
if (serviceClass.getName().equals(service.service.getClassName())) {
82+
return true;
83+
}
84+
}
85+
return false;
86+
}
87+
88+
private boolean connectToEndpoint(String dcid) {
89+
OkHttpClient client = new OkHttpClient();
90+
CountDownLatch latch = new CountDownLatch(1);
91+
final boolean[] result = {false};
92+
93+
Request request = new Request.Builder()
94+
.url("wss://websocket.joshlei.com/growagarden?user_id=" + dcid)
95+
.build();
96+
97+
client.newWebSocket(request, new WebSocketListener() {
98+
@Override
99+
public void onOpen(WebSocket webSocket, Response response) {
100+
Log.d("WebSocket", "Connected to endpoint");
101+
result[0] = true;
102+
latch.countDown();
103+
}
104+
105+
@Override
106+
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
107+
Log.e("WebSocket", "Connection failed", t);
108+
latch.countDown();
109+
}
110+
});
111+
112+
try {
113+
boolean completedInTime = latch.await(5, TimeUnit.SECONDS);
114+
if (!completedInTime) {
115+
Log.w("WebSocket", "Connection timed out after 5 seconds");
116+
}
117+
} catch (InterruptedException e) {
118+
Log.e("WebSocket", "Latch interrupted", e);
119+
}
120+
121+
client.dispatcher().executorService().shutdown();
122+
return result[0];
123+
}
124+
}

app/src/main/java/com/unixity/gagstock/MainActivity.java

Lines changed: 83 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package com.unixity.gagstock;
22

33
import android.annotation.SuppressLint;
4+
import android.app.ActivityManager;
45
import android.content.Context;
56
import android.content.Intent;
67
import android.content.SharedPreferences;
78
import android.graphics.Color;
89
import android.graphics.Typeface;
9-
import android.net.ConnectivityManager;
10-
import android.net.Network;
1110
import android.net.Uri;
1211
import android.os.Bundle;
1312
import android.util.Log;
@@ -29,11 +28,6 @@
2928
import androidx.core.view.WindowInsetsCompat;
3029
import androidx.viewpager2.widget.ViewPager2;
3130

32-
import com.android.volley.Request;
33-
import com.android.volley.RequestQueue;
34-
import com.android.volley.toolbox.JsonArrayRequest;
35-
import com.android.volley.toolbox.Volley;
36-
3731
import org.json.JSONArray;
3832
import org.json.JSONObject;
3933

@@ -52,6 +46,7 @@ public class MainActivity extends AppCompatActivity {
5246
private LinearLayout scrollContent;
5347
private ScrollView scrollContainer;
5448
private TextView loading;
49+
private SharedPreferences prefs;
5550

5651
@SuppressLint("SetTextI18n")
5752
@Override
@@ -64,10 +59,16 @@ protected void onCreate(Bundle savedInstanceState) {
6459
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
6560
return insets;
6661
});
67-
68-
Intent serviceIntent = new Intent(this, BackgroundService.class);
69-
ContextCompat.startForegroundService(this, serviceIntent);
70-
SharedPreferences prefs = getSharedPreferences("notif_prefs", MODE_PRIVATE);
62+
if (!isMyServiceRunning()) {
63+
Intent serviceIntent = new Intent(this, BackgroundService.class);
64+
ContextCompat.startForegroundService(this, serviceIntent);
65+
}
66+
prefs = getSharedPreferences("prefs", MODE_PRIVATE);
67+
if (prefs.getInt("dcid", 0) == 0)
68+
{
69+
Intent discordIntent = new Intent(MainActivity.this, IdActivity.class);
70+
startActivity(discordIntent);
71+
}
7172
scrollContent = findViewById(R.id.scrollContent);
7273
scrollContainer = findViewById(R.id.scrollContainer);
7374
loading = findViewById(R.id.loading);
@@ -116,52 +117,83 @@ protected void onCreate(Bundle savedInstanceState) {
116117
fetchAndDisplaySeeds();
117118
}
118119

120+
private boolean isMyServiceRunning() {
121+
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
122+
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
123+
if (BackgroundService.class.getName().equals(service.service.getClassName())) {
124+
return true;
125+
}
126+
}
127+
return false;
128+
}
129+
119130
private void fetchAndDisplaySeeds() {
120-
String infoUrl = "https://growagardenapi.vercel.app/api/item-info";
131+
// String infoUrl = "https://growagardenapi.vercel.app/api/item-info";
121132
loading.setText(R.string.load);
122-
RequestQueue queue = Volley.newRequestQueue(this);
123-
124-
JsonArrayRequest infoRequest = new JsonArrayRequest(Request.Method.GET, infoUrl, null,
125-
infoResponse -> {
126-
try {
127-
List<String> seedOrder = new ArrayList<>();
128-
129-
for (int i = 0; i < infoResponse.length(); i++) {
130-
JSONObject item = infoResponse.getJSONObject(i);
131-
if ("Fruits".equals(item.optString("category"))) {
132-
seedOrder.add(item.getString("name"));
133-
}
134-
}
135-
136-
final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
137-
cm.registerDefaultNetworkCallback(new ConnectivityManager.NetworkCallback() {
138-
@Override
139-
public void onAvailable(@NonNull Network network) {
140-
Log.d("Network", "Connected: " + network);
141-
connectToEndpoint(seedOrder);
142-
}
143-
144-
@Override
145-
public void onLost(@NonNull Network network) {
146-
Log.d("Network", "Disconnected");
147-
}
148-
});
149-
connectToEndpoint(seedOrder);
150-
} catch (Exception e) {
151-
Log.e("INFO_PARSE", "Error parsing item info", e);
152-
}
153-
},
154-
error -> Log.e("INFO_API", "Failed to load item info", error)
155-
);
133+
// RequestQueue queue = Volley.newRequestQueue(this);
134+
List<String> seedOrder = getStrings();
135+
// JsonArrayRequest infoRequest = new JsonArrayRequest(Request.Method.GET, infoUrl, null,
136+
// infoResponse -> {
137+
// try {
138+
//
139+
// for (int i = 0; i < infoResponse.length(); i++) {
140+
// JSONObject item = infoResponse.getJSONObject(i);
141+
// if ("Fruits".equals(item.optString("category"))) {
142+
// seedOrder.add(item.getString("name"));
143+
// }
144+
// }
145+
//
146+
// final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
147+
// cm.registerDefaultNetworkCallback(new ConnectivityManager.NetworkCallback() {
148+
// @Override
149+
// public void onAvailable(@NonNull Network network) {
150+
// Log.d("Network", "Connected: " + network);
151+
// connectToEndpoint(seedOrder);
152+
// }
153+
//
154+
// @Override
155+
// public void onLost(@NonNull Network network) {
156+
// Log.d("Network", "Disconnected");
157+
// }
158+
// });
159+
//
160+
// } catch (Exception e) {
161+
// Log.e("INFO_PARSE", "Error parsing item info", e);
162+
// }
163+
// },
164+
// error -> Log.e("INFO_API", "Failed to load item info", error)
165+
// );
166+
connectToEndpoint(seedOrder);
167+
// queue.add(infoRequest);
168+
}
156169

157-
queue.add(infoRequest);
170+
@NonNull
171+
private static List<String> getStrings() {
172+
List<String> seedOrder = new ArrayList<>();
173+
seedOrder.add("Carrot");
174+
seedOrder.add("Strawberry");
175+
seedOrder.add("Blueberry");
176+
seedOrder.add("Tomato");
177+
seedOrder.add("Cauliflower");
178+
seedOrder.add("Watermelon");
179+
seedOrder.add("Green Apple");
180+
seedOrder.add("Avocado");
181+
seedOrder.add("Banana");
182+
seedOrder.add("Pineapple");
183+
seedOrder.add("Kiwi");
184+
seedOrder.add("Bell Pepper");
185+
seedOrder.add("Prickly Pear");
186+
seedOrder.add("Loquat");
187+
seedOrder.add("Feijoa");
188+
seedOrder.add("Sugar Apple");
189+
return seedOrder;
158190
}
159191

160192
private void connectToEndpoint(List<String> seedOrder) {
161193
OkHttpClient client = new OkHttpClient();
162194

163195
okhttp3.Request request = new okhttp3.Request.Builder()
164-
.url("wss://websocket.joshlei.com/growagarden/")
196+
.url("wss://websocket.joshlei.com/growagarden?user_id=" + prefs.getInt("dcid", 0))
165197
.build();
166198

167199
client.newWebSocket(request, new WebSocketListener() {
@@ -185,9 +217,6 @@ public void onMessage(WebSocket webSocket, String text) {
185217
for (int i = 0; i < seedStock.length(); i++) {
186218
JSONObject seed = seedStock.getJSONObject(i);
187219
stockMap.put(seed.getString("display_name"), seed);
188-
if (seed.getString("display_name").equals("a")) {
189-
190-
}
191220
}
192221

193222
runOnUiThread(() -> {
@@ -238,7 +267,9 @@ private void addSeedCard(String name, String stock, String imageUrl) {
238267
imageParams.setMargins(0, 0, 16, 0);
239268
image.setLayoutParams(imageParams);
240269
image.setScaleType(ImageView.ScaleType.CENTER_CROP);
241-
Glide.with(this).load(imageUrl).into(image);
270+
if (!isFinishing() && !isDestroyed()) {
271+
Glide.with(this).load(imageUrl).into(image);
272+
}
242273

243274
LinearLayout textLayout = new LinearLayout(this);
244275
textLayout.setOrientation(LinearLayout.VERTICAL);

0 commit comments

Comments
 (0)